c# - 如何将 PropertyInfo[] 转换为我的班级
问题描述
我正在开发一个 .NET Core 3.1 API,我遇到了需要使用 foreach 迭代对象的情况。为了能够做到这一点,我使用了反射:
var properties = myClass.GetType().GetProperties();
之后,代码正常通过foreach,然后我将修改后的属性对象返回给外部API,但它返回超时错误消息,我认为这是因为PropertyInfo []类不太适合返回像这样,或者是别的什么,我不知道。
因此,我想将属性“返回”转换为myClass,或者将其转换为字典,最好返回原始类而不是PropertyInfo[]。
如何将PropertyInfo[]转换为类?
谢谢!
解决方案
听起来您正在尝试序列化此类以发送到 API。您的 API 接受什么格式?如果它接受例如 json,您应该只使用 json 序列化程序(如 JSON.net - 它使用引擎盖下的反射之类的东西)。如果您尝试序列化为更奇特或不受支持的格式,那么您可以这样做。缺少的是 Properties[] 数组不包含属性的值,只包含定义。您可以使用属性数组来获取值:
public class MyClass
{
public int a { get; set;}
public string b {get; set; }
}
void Main()
{
var instance = new MyClass{a=1,b="2"};
var properties = instance.GetType().GetProperties();
var value_of_a = properties.First(p => p.Name == "a").GetValue(instance);
}
每个属性都有一个“GetValue”方法,可以从属性来自的类中提取与该属性相对应的值 - 请注意,在上面调用“GetProperties”之前调用“GetType()” - 这意味着你获取类型的属性,而不是实例。然后,您需要将这些属性定义带回实例以获取属性值。
推荐阅读
- unity3d - NPC不断走进墙壁 - Unity2D
- html - 在 VBA 中使用 ReactJS 选择 HTML 下拉列表
- javascript - 使用分层 .reduce() 或 .filter() 函数基于单独的搜索数组在对象数组中查找对象?
- javascript - 如何在 redux 中避免不可变
- c# - RestSharp,基本身份验证
- c - 在函数 C 中修改字符串
- javascript - getElementbyID 中的 Javascript 变量
- scala - Spark读取分隔的csv忽略转义
- java - 当我每个都有 charAt 时如何定义 00-90
- ionic4 - 如何在离子含量中垂直居中对齐离子载玻片?