ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C# 历遍对象属性

2019-09-07 12:02:32  阅读:300  来源: 互联网

标签:C# AppendLine public master Slaves new sb 历遍 属性


今天有个网友问如何历遍对象的所有公共属性,并且生成XML。采用序列化方式的话比较简单,我写个手工解析的例子,这样能让初学者更加理解也比较灵活,记录一下吧或许会有人用到。

对象模型:

    public class Master
    {
        public string Description { get; set; }
        public List<Slave> Slaves { get; set; }
    }

    public class Slave
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }

 

解析代码:

  //生成数据
  Master master = new Master();
  master.Description = "ABCD";
  master.Slaves = new List<Slave>();
  master.Slaves.Add(new Slave { Name = "aaa", ID = 1 });
  master.Slaves.Add(new Slave { Name = "bbb", ID = 2 });
  master.Slaves.Add(new Slave { Name = "cccc", ID = 3 });

  StringBuilder sb = new StringBuilder("<Root>\r\n");
//获取对象所有公共属性 foreach (PropertyInfo pi in master.GetType().GetProperties()) { //判断属性是否为集合类型 if (pi.PropertyType.IsGenericType) { sb.AppendLine($"<Items name=\"{pi.Name}\">"); //获取集合对象 foreach (object items in (pi.GetValue(master, null) as IEnumerable<object>)) { sb.AppendLine($"<{items.GetType().Name}>"); //获取集合对象成员 foreach (PropertyInfo item in items.GetType().GetProperties()) { sb.AppendLine($"<{item.Name}>{item.GetValue(items, null)}</{item.Name}>"); } sb.AppendLine($"</{items.GetType().Name}>"); } sb.AppendLine("</Items>"); } else { sb.AppendLine($"<{pi.Name}>{pi.GetValue(master, null)}</{pi.Name}>"); } } sb.AppendLine("</Root>"); MessageBox.Show(sb.ToString());

 

生成的XML结构:

<Root>
  <Description>ABCD</Description>
  <Items name="Slaves">
    <Slave>
      <ID>1</ID>
      <Name>aaa</Name>
    </Slave>
    <Slave>
      <ID>2</ID>
      <Name>bbb</Name>
    </Slave>
    <Slave>
      <ID>3</ID>
      <Name>cccc</Name>
    </Slave>
  </Items>
</Root>

 

标签:C#,AppendLine,public,master,Slaves,new,sb,历遍,属性
来源: https://www.cnblogs.com/MuNet/p/11479895.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有