好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#中把任意类型的泛型集合转换成SQLXML数据格式的实例

话不多说,跟着小编一起来看下吧

?

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格式。

注释已经写得很详尽了,我也不知道还需要说明点什么,如果这个小例子能帮到谁的小忙就最好不过了哈~

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持服务器之家!

原文链接:http://HdhCmsTestcnblogs测试数据/Tench/p/GenericCollectionConverToXml.html

dy("nrwz");

查看更多关于C#中把任意类型的泛型集合转换成SQLXML数据格式的实例的详细内容...

  阅读:44次