C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法
2016-12-12 10:13
1411 查看
在工作中,如果需要跟XML打交道,难免会遇到需要把一个类型集合转换成XML格式的情况。之前的方法比较笨拙,需要给不同的类型,各自写一个转换的函数。但是后来接触反射后,就知道可以利用反射去读取一个类型的所有成员,也就意味着可以替不同的类型,创建更通用的方法。这个例子是这样做的:利用反射,读取一个类型的所有属性,然后再把属性转换成XML元素的属性或者子元素。下面注释比较完整,就话不多说了,有需要看代码吧!
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; using System.Reflection; namespace GenericCollectionToXml { class Program { static void Main(string[] args) { var persons = new[]{ new Person(){Name="李元芳",Age=23}, new Person(){Name="狄仁杰",Age=32} }; Console.WriteLine(CollectionToXml(persons)); } /// <summary> /// 集合转换成数据表 /// </summary> /// <typeparam name="T">泛型参数(集合成员的类型)</typeparam> /// <param name="TCollection">泛型集合</param> /// <returns>集合的XML格式字符串</returns> public static string CollectionToXml<T>(IEnumerable<T> TCollection) { //定义元素数组 var elements = new List<XElement>(); //把集合中的元素添加到元素数组中 foreach (var item in TCollection) { //获取泛型的具体类型 Type type = typeof(T); //定义属性数组,XObject是XAttribute和XElement的基类 var attributes = new List<XObject>(); //获取类型的所有属性,并把属性和值添加到属性数组中 foreach (var property in type.GetProperties()) //获取属性名称和属性值,添加到属性数组中(也可以作为子元素添加到属性数组中,只需把XAttribute更改为XElement) attributes.Add(new XAttribute(property.Name, property.GetValue(item, null))); //把属性数组添加到元素中 elements.Add(new XElement(type.Name, attributes)); } //初始化根元素,并把元素数组作为根元素的子元素,返回根元素的字符串格式(XML) return new XElement("Root", elements).ToString(); } /// <summary> /// 人类(测试数据类) /// </summary> class Person { /// <summary> /// 名称 /// </summary> public string Name { get; set; } /// <summary> /// 年龄 /// </summary> public int Age { get; set; } } } }
把属性作为属性输出:
<Root> <Person Name="李元芳" Age="23" /> <Person Name="狄仁杰" Age="32" /> </Root>
把属性作为子元素输出:
<Root> <Person> <Name>李元芳</Name> <Age>23</Age> </Person> <Person> <Name>狄仁杰</Name> <Age>32</Age> </Person> </Root>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!
您可能感兴趣的文章:
- C#使用xsd文件验证XML格式是否正确的实现方法
- C#中把任意类型的泛型集合转换成SQLXML数据格式的实例
- C#实现导出List数据到xml文件的方法【附demo源码下载】
- C#实现的xml操作类完整实例
- C#实现XML与实体类之间相互转换的方法(序列化与反序列化)
- C# XML操作 代码大全(读XML,写XML,更新,删除节点,与dataset结合等)
- C#对XML文件的各种操作实现方法
- C# WinForm开发中使用XML配置文件实例
- C#对象与XMl文件之间的相互转换
- C#中XmlTextWriter读写xml文件详细介绍
- C# 写入XML文档三种方法详细介绍
- C# 操作XML文档 使用XmlDocument类方法
- C#实现XML文档的增删改查功能示例
相关文章推荐
- C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法
- C#中把任意类型的泛型集合转换成SQLXML数据格式的实例
- C# 泛型 与 反射 实现 任意类型间的类型转换
- 利用泛型和反射编写通用基础类型转换方法
- Unity C# 使用反射,利用字符串作为泛型参数调用泛型方法。
- 黑马程序员--Java基础加强--15.利用反射操作泛型IV【通过反射Method解析泛型方法思路】【通过Method对四种Type子接口类型进行解剖】【使用递归对任意复合泛型类型进行彻底解剖】【个人
- C# 利用反射动态将字符串转换成属性对应的类型值
- C#中linq学习(将泛型集合转换为XML元素)示例
- C#利用 string.Join 泛型集合快速转换拼接字符串
- C#中linq学习(将泛型集合转换为XML元素)示例
- C# 工具类--类型转换的泛型方法
- 利用泛型和反射,将从数据库select出来的集合直接转换成对象
- C# 控制台输入输出非字符串类型数据的方法[进制数字转换为八进制数字]
- 黑马程序员--Java基础加强--14.利用反射操作泛型III【解析关于泛型类型的细节信息的获取方法】【Method与泛型相关的方法】【个人总结】
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- Linq中字段数据类型转换问题(Linq to entity,LINQ to Entities 不识别方法"System.String ToString()"问题解决)
- C# 枚举类型转换字符串 Enum to string,枚举转换为下拉菜单 Enum DropDownList
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(7):服务器端和客户端数据类型的自动转换:泛型集合类型
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- 将任意一个对象中的所有String类型 的成员变量所对应字符串中的“b”改成“a”(利用反射)