我正在寻找一种有效的方法来获取复杂类型的所有属性/字段,其内部具有另一种复杂类型的属性。
实施例
class A
{
public int Id{get;set;}
public string Name{get;set;}
public List<string> Branch{get;set;}
public BuildData build {get;set;}
public SampleData sample {get;set;}
public DummyData dData {get;set}
//constructor
public A(){}
}
class BuildData{
private string _buildData;
public string param1{get;set;}
public string[] paramArgs{get;set;}
}
class SampleData {
public string Test{get;set;}
public List<DummyData> dummyArgs{get;set;}
}
class DummyData {
public int Val{get;set;}
public string GUIData{get;set;}
}
我必须使用class A
&amp;获取其所有成员(字段,道具),其中还应包括其他复杂类型的成员,如DummyData,BuildData,SampleData。
我尝试使用Reflection但无法获得所有成员。
public void PrintProperties(object obj, ref String value)
{
if (obj == null)
{
return;
}
Type objType = obj.GetType();
PropertyInfo[] properties = objType.GetProperties();
foreach (PropertyInfo property in properties)
{
object propValue = property.GetValue(obj, null);
var elems = propValue as IList;
if (elems != null)
{
foreach (var item in elems)
{
PrintProperties(item, ref value); }
}
else
{
if (property.PropertyType.Assembly == objType.Assembly)
{
value += string.Format("*Name - {0}; Type - {1}*", property.Name, property.PropertyType);
PrintProperties(propValue, ref value);
}
else
{
value += string.Format("Name - {0}; defaultValue-{1}; Type - {2};", property.Name, propValue, property.PropertyType);
}
}
}
}