C # Reflection: получение свойств вложенных объектов - PullRequest
4 голосов
/ 13 мая 2009

У меня проблемы с получением свойств вложенных объектов. Для примера, с которым я работаю, у меня есть 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 , name и category , и если я сделаю это:

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

Я получу свойства category_id и category ; это работает просто отлично. Но , вот где я запутался ...

Как видите, категория является последним свойством пользователя , если я сделаю это

//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 ]

4 голосов
/ 13 мая 2009

Делая type.GetType(), вы получаете typeof(Type), а не тип свойства.

Просто сделай

PropertyInfo[] props = type.GetProperties();

чтобы получить свойства, которые вы хотите.

Однако вам следует искать свойства по их именам, а не по их порядку, потому что порядок не гарантируется, как вы ожидаете (см. документация ):

Метод GetProperties не вернуть свойства в конкретном порядок, такой как алфавитный или порядок декларирования. Ваш код не должен зависит от порядка, в котором свойства возвращаются, потому что это порядок меняется.

2 голосов
/ 13 мая 2009

Удалите GetType () из типа. Вы смотрите на свойства самого типа Type.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...