Я повторно оцениваю свойства посредством отражения, используя object.GetType (). GetProperty (string propertyName).
Это нормально работает, если объект имеет закрытый класс, но имеет свойство как объект обычного открытого класса. Однако, если это свойство содержит запечатанный объект класса, оно не возвращает никаких свойств через метод GetProperty ().
Попытка выполнить итерацию рекурсивно из объекта базового класса через Prpty1 -> Prpty2 -> Prpty3. param.Properties содержит массив строк для Prpty1, Prpty2, Prpty3. Не могу получить Prpty2, он идет как Null. Используя описанные ниже методы для этого доступа.
Пример кода выглядит следующим образом:
//Methods below are used to extract value from Object (basically BaseClass Object)
private string EvaluateObject(object obj, MappedParameter param)
{
object evaluatedObj = obj;
foreach (string s in param.Properties)
{
evaluatedObj = EvalProperty(evaluatedObj, s);
}
return (evaluatedObj == obj ? null : evaluatedObj.ToString());
}
private object EvalProperty(object obj, string propertyName)
{
System.Reflection.PropertyInfo propInfo = obj.GetType().GetProperty(propertyName);
if (propInfo == null)
throw new Exception("Invalid Property token");
object propertyValue = propInfo.GetValue(obj, null);
return propertyValue;
}
//Below classes are Data Wrappers
namespace TryClassLibrary
{
public class BaseClass
{
private NestedClass _Data = new NestedClass();
public NestedClass Prpty1
{
set { _Data = value; }
get { return _Data; }
}
}
}
namespace TryClassLibrary
{
public sealed class NestedClass
{
public int Id { get; set; }
public NestedNestedClass Prpty2 = new NestedNestedClass();
}
public sealed class NestedNestedClass
{
private string _Message;
public NestedNestedClass()
{
Prpty3 = "Test value";
}
public string Prpty3
{
set
{
_Message = value;
}
get { return _Message; }
}
}
}
Пожалуйста, может кто-нибудь помочь мне найти способ доступа к Prpty2, Prpty3 или это какое-то существующее ограничение при использовании отражения. Спасибо.
sealed
не влияет наGetProperty
никаким образом AFAIK. Я подозреваю, что проблема в другом - скорее всего,Type
в какой-то момент запутался, и вы смотрите не на тот тип. - person Marc Gravell   schedule 13.06.2012