object.GetType()。GetProperty(string propertyName)を使用して、リフレクションを介してプロパティを再帰的に評価しています。
これは、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にアクセスする方法を見つけるのを手伝ってくれませんか、それともリフレクションを使用する際の既存の制約ですか。ありがとう。