如何遍历PCL项目中对象的所有属性(包括子/子属性)?

时间:2017-05-19 11:47:16

标签: c# portable-class-library

我想创建一个方法,它接受“任何继承自Object数据类型的类型”(通用)作为参数,然后迭代它的所有属性。

我试过了:

foreach (var prop in obj.GetType().GetProperties())
{
    Console.WriteLine("{0} = {1}", prop.Name, prop.GetValue(obj, null));
}

但是PCL项目中不存在GetProperties()方法。

1 个答案:

答案 0 :(得分:3)

在大多数PCL配置文件中,至少是基于.NET 4.5的配置文件,您应该使用TypeInfo而不是Type来获取类型信息。

基本上您可以用

替换obj.GetType().GetProperties()
obj.GetType().GetTypeInfo().GetProperties()

有关为特定类型声明的所有属性的列表,请使用DeclaredProperties而不是GetProperties()。对于完整的属性列表,包括继承,非公共,实例和静态属性,您可以使用扩展方法GetRuntimeProperties()

有关TypeInfo的更多信息,请参阅MSDN documentation