时间:2021-05-20
话不多说,跟着小编一起来看下吧
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlTypes;using System.Data;using System.Reflection;using System.IO;using System.Xml;namespace CollectionToXml{ class Program { static void Main(string[] args) { //persons可替换为任何泛型集合 var persons = new[] { new Person("李元芳", 23) , new Person("狄仁杰", 32) }; SqlXml sqlXml = GenericConver.CollectionToSqlXml(persons); Console.WriteLine(sqlXml.Value); } /// <summary> /// 泛型转换类 /// </summary> static class GenericConver { /// <summary> /// 集合转换成SQLXML /// </summary> /// <typeparam name="T">泛型参数(集合成员的类型)</typeparam> /// <param name="TCollection">泛型集合</param> /// <returns></returns> public static SqlXml CollectionToSqlXml<T>(IEnumerable<T> TCollection) { //先把集合转换成数据表,然后把数据表转换成SQLXML return DataTableToSqlXml(CollectionToDataTable(TCollection)); } /// <summary> /// 集合转换成数据表 /// </summary> /// <typeparam name="T">泛型参数(集合成员的类型)</typeparam> /// <param name="TCollection">泛型集合</param> /// <returns></returns> public static DataTable CollectionToDataTable<T>(IEnumerable<T> TCollection) { //获取泛型的具体类型 Type type = typeof(T); //获取类型的公共属性 PropertyInfo[] properties = type.GetProperties(); //创建数据表,表名为类型名称 DataTable table = new DataTable(type.Name); //把公共属性转行成表格列,再把表格列添加到表格中 foreach (var property in properties) { //创建一个表格列,列名为属性名,列数据类型为属性的类型 DataColumn column = new DataColumn(property.Name, property.PropertyType); //把表格列添加到表格中 table.Columns.Add(column); } //把泛型集合元素添加到数据行中 foreach (var item in TCollection) { //创建和表格行架构相同的表格行 DataRow row = table.NewRow(); //读取元素所有属性列的值,并根据属性名称,把属性值添加到表格行中 foreach (var property in properties) row[property.Name] = property.GetValue(item, null); //把表格行添加到表格中 table.Rows.Add(row); } return table; } /// <summary> /// 数据表转换成SQLXML /// </summary> /// <param name="table">数据表</param> /// <returns></returns> public static SqlXml DataTableToSqlXml(DataTable table) { SqlXml xml; //如果表格名为空,则设置表格名 if (string.IsNullOrEmpty(table.TableName)) table.TableName = "TableName"; //把数据表转换成XML using (var ms = new MemoryStream()) { //把数据表转换成XML格式,并写入内存流 table.WriteXml(ms); //把内存流读取标记设置回起点 ms.Position = 0; //使用XmlReader读取内存流,并创建一个SqlXml对象 xml = new SqlXml(XmlReader.Create(ms)); } return xml; } } /// <summary> /// 人类(测试数据类) /// </summary> class Person { /// <summary> /// 构造函数 /// </summary> /// <param name="name">名称</param> /// <param name="age">年龄</param> public Person(string name, int age) { Name = name; Age = age; } /// <summary> /// 名称 /// </summary> public string Name { get; set; } /// <summary> /// 年龄 /// </summary> public int Age { get; set; } } }}输出结果:
<DocumentElement> <Person> <Name>李元芳</Name> <Age>23</Age> </Person> <Person> <Name>狄仁杰</Name> <Age>32</Age> </Person></DocumentElement>主要是通过反射,读取泛型类型的属性,然后根据读取到的属性生成数据表,再把数据表转换成XML格式。
注释已经写得很详尽了,我也不知道还需要说明点什么,如果这个小例子能帮到谁的小忙就最好不过了哈~
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C#实现集合转换成json格式数据的方法。分享给大家供大家参考,具体如下://////dataTable转换成Json格式/////////pub
c#的泛型没有类型通配符,原因是.net的泛型是CLR支持的泛型,而Java的JVM并不支持泛型,只是语法糖,在编译器编译的时候都转换成object类型类型通配
前几天在工作中,遇到一个问题:需要将查询出来的DataTable数据源,转换成List的泛型集合(已知T类型)。第一反应,我想肯定要用到“泛型”(这不是废话吗?
一、泛型概述1、背景在Java中增加泛型之前,泛型程序设计使用继承来实现的。坏处:需要进行强制类型转换可向集合中添加任意类型的对象,存在风险2、泛型的使用Lis
核心代码:ClassUtils{/***formatMySQLDateTime(YYYY-MM-DDhh:mm:ss)把mysql中查找出来的数据格式转换成时间