在课堂上获取班级的所有成员(道具,领域)

时间:2018-05-15 06:52:48

标签: c# system.reflection

我正在寻找一种有效的方法来获取复杂类型的所有属性/字段,其内部具有另一种复杂类型的属性。

实施例

    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);
                }
            }
        }
    }

0 个答案:

没有答案