class ClassA
{
public ClassB myProp {get;set;}
}
class ClassB
{
public ClassC anotherProp {get;set;}
}
class ClassC
{
public string Name {get;set;}
}
我有一个ClassA类型的对象。如何通过迭代递归获取ClassC的Name属性值?如何循环访问类属性树?
class ClassA
{
public ClassB myProp {get;set;}
}
class ClassB
{
public ClassC anotherProp {get;set;}
}
class ClassC
{
public string Name {get;set;}
}
我有一个ClassA类型的对象。如何通过迭代递归获取ClassC的Name属性值?如何循环访问类属性树?
好的,解决了。 比方说,我到的路径看重我想要得到的属性:
ClassB.ClassC.Name
那么,parh我没有通过的递归遍历树分割后;)
var dataPath = column.SortMemberPath.Split(new char[] { '.' });
[...]
foreach (var item in (System.Collections.IList)myObject)
{
var newItem = item;
foreach (var path in dataPath)
{
var actalValue = newItem.GetType().GetProperty(path).GetValue(newItem, null);
newItem = actalValue; //it does the trick
}
now, the newItem is my wanted property value
}
我对你想要完成的事情有点粗略。我想你想从ClassA开始,并最终遍历这些属性并进入ClassC。要做到这一点,你大多需要了解如何进行递归编程和少量的反射知识。这是我过去使用的代码的修改版本,您可以使用find here。
private void SerializeObject(object obj) {
Type type = obj.GetType();
foreach (PropertyInfo info2 in type.GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
{
MethodInfo getMethod = info2.GetGetMethod(true);
if (getMethod != null)
SerializeObject(getMethod.Invoke(obj, null));
}
}
这样做是通过每个属性走路和使用各个属性来执行的财产,获得正被退回,这样就可以通过调用相同SerializeObject
方法穿行对象的get方法。