微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 使用包含其他对象数组的对象的反射读取属性

如何在c#中使用反射来读取包含数组类型元素的对象的属性.如果我有一个名为GetMyProperties的方法,我确定该对象是一个自定义类型,那么如何读取数组的属性和其中的值. IsCustomType是确定类型是否为自定义类型的方法.
public void GetMyProperties(object obj) 
{ 
    foreach (PropertyInfo pinfo in obj.GetType().GetProperties()) 
    { 
        if (!Helper.IsCustomType(pinfo.PropertyType)) 
        { 
            string s = pinfo.GetValue(obj,null).ToString(); 
            propArray.Add(s); 
        } 
        else 
        { 
            object o = pinfo.GetValue(obj,null); 
            GetMyProperties(o); 
        } 
    } 
}

场景是,我有一个ArrayClass的对象,ArrayClass有两个属性

-string Id
-DeptArray[] depts

DeptArray是另一个有2个属性的类:

-string code 
-string value

所以,这个方法得到一个ArrayClass的对象.我想从字典/列表项中读取所有属性,从顶到底,存储名称/值对.我能够为value,custom,enum类型做.我被卡住了数组的对象.不知道该怎么做

解决方法

尝试这段代码
public static void GetMyProperties(object obj)
{
  foreach (PropertyInfo pinfo in obj.GetType().GetProperties())
  {
    var getmethod = pinfo.Getgetmethod();
    if (getmethod.ReturnType.IsArray)
    {
      var arrayObject = getmethod.Invoke(obj,null);
      foreach (object element in (Array) arrayObject)
      {
        foreach (PropertyInfo arrayObjPinfo in element.GetType().GetProperties())
        {
          Console.WriteLine(arrayObjPinfo.Name + ":" + arrayObjPinfo.Getgetmethod().Invoke(element,null).ToString());
        }
      }
    }
  }
}

我已经测试了这个代码,它通过反射来正确地解析了数组.

原文地址:https://www.jb51.cc/csharp/92136.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐