我正在使用 object.GetType().GetProperty(string propertyName) 通过反射反复评估属性。
如果 obj 是密封类但具有作为普通公共类对象的属性,这可以正常工作。但是,如果此属性包含一个密封的类对象,它不会通过 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 的方法,或者它是使用反射的一些现有限制。谢谢。