今天有个网友问如何历遍对象的所有公共属性,并且生成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# 历遍对象属性所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)