【问题标题】:How to convert PropertyInfo[] to my class如何将 PropertyInfo[] 转换为我的班级
【发布时间】:2021-06-11 15:21:04
【问题描述】:

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

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

之后,代码正常通过foreach,然后我将修改后的properties对象返回给外部API,但它返回超时错误消息,我认为是因为PropertyInfo[] 类不太适合这样返回,或者是别的什么,我不知道。

因此,我想将 properties "back" 转换为 myClass,或者将其转换为字典,最好返回原始类PropertyInfo[]

如何将 PropertyInfo[] 转换为类?

谢谢!

【问题讨论】:

  • 我感觉你的问题不是你想的那样,尽管我同意你不应该返回PropertyInfo[]。我们需要更多的代码上下文。超时有时是因为误用了 async/await。
  • 在我的代码中,我没有使用 async/await,它们在我的代码中显示的并不多,我想我问的内容含糊不清,我的问题是如何转换 PropertyInfo [] 进入一个类。
  • 您能粘贴导致问题的代码吗?

标签: c# .net api system.reflection propertyinfo


【解决方案1】:

听起来您正在尝试序列化此类以发送到 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”方法,该方法可以从该属性所来自的类中提取与该属性对应的值 - 请注意,在上面调用“GetType()”之前,您调用“GetProperties” - 这意味着您将获得类型的属性,而不是实例。然后,您需要将这些属性定义带回实例以获取属性值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    相关资源
    最近更新 更多