如何在.NET Core中将PropertyInfo[]转换为自定义类或字典
问题根因
直接返回PropertyInfo[]会触发JSON序列化器递归序列化反射元数据的嵌套属性(比如PropertyInfo.DeclaringType又包含自身的PropertyInfo集合),引发无限递归最终导致请求超时,属于反射元数据类型序列化的典型问题。
解决方案
你不需要把PropertyInfo[]转为类实例,只需要保留原始的myClass对象,遍历PropertyInfo时把修改的属性值直接回写到原对象即可,优先返回原类实例。
方案1:返回原始类实例(推荐)
完整实现代码如下:
// 保留原始类实例,不要丢弃 var myObj = new MyClass(); // 获取属性元数据集合 var properties = myObj.GetType().GetProperties(); foreach (var prop in properties) { // 你的原有遍历修改逻辑示例:比如给所有字符串类型属性赋值 if (prop.PropertyType == typeof(string)) { // 把修改后的值回写到原始对象 prop.SetValue(myObj, "修改后的值"); } } // 直接返回原始类实例即可,无需操作PropertyInfo[] return myObj;
方案2:转换为字典结构返回
如果你需要返回键值对结构,可通过如下代码转换:
var myObj = new MyClass(); var properties = myObj.GetType().GetProperties(); var resultDict = new Dictionary<string, object>(); foreach (var prop in properties) { // 你的原有遍历修改逻辑 if (prop.PropertyType == typeof(string)) { prop.SetValue(myObj, "修改后的值"); } // 把属性名和属性值写入字典 resultDict.Add(prop.Name, prop.GetValue(myObj)); } // 返回字典即可 return resultDict;
内容的提问来源于stack exchange,提问作者Matheus Souza Silva
相关产品推荐
相关产品推荐

