C#中把任意类型的泛型集合转换成SQLXML数据格式的实例
程序员文章站
2022-04-15 09:32:55
话不多说,跟着小编一起来看下吧
using system;
using system.collections.generic;
using system.li...
话不多说,跟着小编一起来看下吧
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格式。
注释已经写得很详尽了,我也不知道还需要说明点什么,如果这个小例子能帮到谁的小忙就最好不过了哈~
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
上一篇: 浅谈 ASP 模板技术之参数传递
下一篇: 九种防MDB数据库被下载的方法小结