程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中把恣意類型的泛型集合轉換成SQLXML數據格式的實例

C#中把恣意類型的泛型集合轉換成SQLXML數據格式的實例

編輯:C#入門知識

C#中把恣意類型的泛型集合轉換成SQLXML數據格式的實例。本站提示廣大學習愛好者:(C#中把恣意類型的泛型集合轉換成SQLXML數據格式的實例)文章只能為提供參考,不一定能成為您想要的結果。以下是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格式。

正文曾經寫得很詳盡了,我也不知道還需求闡明點什麼,假如這個小例子能幫到誰的小忙就最好不過了哈~

以上就是本文的全部內容,希望本文的內容對大家的學習或許任務能帶來一定的協助,同時也希望多多支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved