所以我现在所拥有的是这样的:
PropertyInfo[] info = obj.GetType().GetProperties(BindingFlags.Public);
obj
某个对象在哪里.
问题是我想要的一些属性不在于obj.GetType()
它们在其中一个基类中.如果我停止调试器并查看obj,我必须挖掘一些"基础"条目以查看我想要获得的属性.是否有一些绑定标志我可以设置让它返回那些或我是否必须递归挖掘Type.BaseType
层次结构并对GetProperties
所有这些做?
用这个:
PropertyInfo[] info = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
编辑:当然,正确答案是杰伊.GetProperties()
没有参数相当于GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static )
.本BindingFlags.FlattenHierarchy
次没有作用在这里.
我不认为这很复杂.
如果您将BindingFlags
参数移除到GetProperties,我想您会得到您正在寻找的结果:
class B { public int MyProperty { get; set; } } class C : B { public string MyProperty2 { get; set; } } static void Main(string[] args) { PropertyInfo[] info = new C().GetType().GetProperties(); foreach (var pi in info) { Console.WriteLine(pi.Name); } }
产生
MyProperty2 MyProperty
如果您访问Type.BaseType
,则可以获得基本类型.您可以递归访问每种基本类型,并且当您的类型为时,您将知道何时触及底部System.Object
.
Type type = obj.GetType(); PropertyInfo[] info = type.GetProperties(BindingFlags.Public); PropertyInfo[] baseProps = type.BaseType.GetProperties(BindingFlags.Public);