C# 历遍对象属性

C# 历遍对象属性,第1张

概述今天有个网友问如何历遍对象的所有公共属性,并且生成XML。采用序列化方式的话比较简单,我写个手工解析的例子,这样能让初学者更加理解也比较灵活,记录一下吧或许会有人用到。 对象模型: public class Master { public string Description { get; set; } public List<Slave> S

今天有个网友问如何历遍对象的所有公共属性,并且生成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# 历遍对象属性全部内容,希望文章能够帮你解决C# 历遍对象属性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1214649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存