1
我通过使用object.GetType()。GetProperty(字符串属性名称)反射recrusively评估属性。反射不提取值:密封类有一个属性,它是另一个密封类的对象。
这是工作正常的情况下,obj是密封类,但具有属性作为正常公共类的对象。但是,如果此属性包含一个密封的类对象,它不会通过GetProperty()方法返回任何属性。
尝试通过Prpty1 - > Prpty2 - > Prpty3从Baseclass对象递归迭代。 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”在某个时刻已经感到困惑,而且你正在寻找错误的类型。 –
是的标记我做了一个控制台应用程序正在测试这个,我发现NestedClass对象不能通过GetProperty()方法获得Prpty2。 PropertyInfo对象将作为Null来使用。 –