2013-05-03 2 views
0

У меня есть класс структуру, как показано ниже,.Net Reflection Property Info из PropertyInfo

Class A 
{ 
    ClassB objB {get; set;} 
    int data {get; set;} 
} 
Class B 
{ 
    int x {get; set;} 
    int data {get; set;} 
} 

Теперь мне нужно использовать отражение в классе А, чтобы сохранить следующий вход в класс объекта (например, вход = > данные = 10; х = 15; данные = 20)

Проблема: Когда я это сделать, PropertyInfo [] р = TypeOf (CLASSA) .GetProperties()

я получаю [objB, данные] в р ,

Но мне нужно, чтобы перейти к основным типам данных для любых таких выше структур, что мне нужно что-то вроде,

[данные (из класса А), х (из класса B), данные (из класса B)] Это мое первое требование

2-е требование: Как только я достиг выше требования, как я могу различать данные (из класса A) и данных (из класса B).

+2

Возможно, ваш дизайн неправильный. – SimpleVar

+0

Не могли бы вы рассказать, как вы пришли к использованию рефлексии? Может быть, есть и другой способ. –

+0

Это веб-сервис, поэтому есть несколько запросов, теперь мне нужен общий подход, так что на основе типа запроса я смогу построить запрос, вместо того, чтобы иметь buildReq для каждого запроса. Именно поэтому мне нужно отражение – user1810502

ответ

0

Хороший вопрос.

Вы можете написать рекурсивный алгоритм, который проходит через свойства первого класса и продолжает копать *, в то время как тип свойства property.PropertyType не определен в сборке .NET property.PropertyType.Assembly. Поэтому проверьте сборку или список типов, которые вы считаете примитивными.

+0

Проверка сборки завершится неудачно, если один из членов имеет тип Список , Список принадлежит mscorlib.dll, но содержит локальный класс сборки ... это действительно отстой ... Я надеялся, что будет более прямой подход – user1810502

+0

Также , Мне нужно скопировать значения в примитивные типы, заданные для объекта, снова сделать то же самое для родительских объектов, то есть боль – user1810502

0

Можете ли вы попытаться использовать foreach loop на p.

Проверьте тип каждого элемента внутри первого foreach и если он соответствует типуOF (B), затем выполните свойствоInfo по этому конкретному элементу, чтобы перейти в свойства класса B. Теперь вы можете сначала установить свойства класса B, а затем второй свойство A.