如何将PropertyInfo[]转换为我的类

How to convert PropertyInfo[] to my class

提问人:Matheus Souza Silva 提问时间:6/11/2021 最后编辑:Matheus Souza Silva 更新时间:6/11/2021 访问量:820

问:

我正在开发一个 .NET Core 3.1 API,我遇到了需要使用 foreach 迭代对象的情况。为了能够做到这一点,我使用了 Reflection:

var properties = myClass.GetType().GetProperties();

之后,代码像往常一样通过foreach,然后我将修改后的属性对象返回给外部API,但它返回了超时错误消息,我认为这是因为PropertyInfo[]类不太适合这样返回,或者是其他原因,我不知道。

因此,我想将属性“转换回”myClass,或者将其转换为字典,最好返回原始类而不是 PropertyInfo[]。

如何将 PropertyInfo[] 转换为类?

谢谢!

C# API System.Reflection 属性信息

评论

1赞 Crowcoder 6/11/2021
我有一种感觉,你的问题不是你想象的那样,尽管我同意你不应该回来。我们需要更多的代码上下文。超时有时是由于误用 async/await 造成的。PropertyInfo[]
0赞 Matheus Souza Silva 6/11/2021
在我的代码中,我没有使用 async/await,我的代码中没有太多可显示的内容,我想我提出的问题含糊不清,我的问题是如何将 PropertyInfo[] 转换为类。
0赞 sr28 6/12/2021
你能粘贴导致问题的代码吗?

答:

0赞 Peter Dowdy 6/11/2021 #1

听起来您正在尝试序列化此类以发送到 API。您的 API 接受什么格式?如果它接受e.g. json,你应该只使用一个 json 序列化程序(比如 JSON.net - 无论如何它都会在后台使用反射之类的东西)。如果您尝试序列化为更奇特或不受支持的格式,则可以采用这种方式。缺少的是 Properties[] 数组不包含属性的值,只包含定义。您可以使用 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()” - 这意味着您获得的是 Type 的属性,而不是实例。然后,您需要将这些属性定义带回实例以获取属性值。