C#Reflection:获取嵌套对象属性

时间:2009-05-13 09:14:13

标签: c# reflection

我无法获取嵌套对象属性。对于我正在使用的示例,我有2个类:

public class user 
{
  public int _user_id {get; set;}
  public string name {get; set;}
  public category {get; set;}
}

public class category 
{
  public int category_id {get; set;}
  public string name {get; set;}
}

那里很简单,如果我反映其中任何一个,我会得到正确的 GetProperties()集合,例如,如果我这样做:

PropertyInfo[] props = new user().GetType().GetProperties();

我会获取 user_id 名称类别的属性,如果我这样做:

PropertyInfo[] props = new category().GetType().GetProperties();

我会获得 category_id 类别的属性;这很好用。 但是,这是我感到困惑的地方......

如您所见,类别用户的最后一项属性,如果我这样做

//this gets me the Type 'category'
Type type = new user().GetType().GetProperties().Last().PropertyType;
//in the debugger, I get "type {Name='category', FullName='category'}"
//so I assume this is the proper type, but when I run this:
PropertyInfo[] props = type.GetType().GetProperties();
//I get a huge collection of 57 properties

知道我搞砸了吗?可以这样做吗?

2 个答案:

答案 0 :(得分:4)

通过type.GetType(),你得到的是typeof(Type),而不是属性类型。

只做

PropertyInfo[] props = type.GetProperties();

获取您想要的属性。

但是,您应该按照名称而不是按订单查找属性,因为订单不能保证符合您的预期(参见documentation):

  

GetProperties方法没有   返回特定的属性   顺序,如字母或   申报单。你的代码一定不能   取决于其中的顺序   属性被返回,因为那   订单各不相同。

答案 1 :(得分:2)

从类型中删除GetType()。您正在查看Type类型本身的属性。