国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

2019-10-29 21:17:17
字體:
來源:轉載
供稿:網友

話不多說,跟著小編一起來看下吧

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

注釋已經寫得很詳盡了,我也不知道還需要說明點什么,如果這個小例子能幫到誰的小忙就最好不過了哈~

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持VEVB武林網!


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 进贤县| 电白县| 大城县| 得荣县| 莆田市| 扶绥县| 新邵县| 长乐市| 凤台县| 金沙县| 农安县| 韶关市| 广河县| 宜阳县| 雅安市| 温泉县| 栾城县| 鞍山市| 南昌县| 霸州市| 翼城县| 时尚| 兴化市| 河池市| 闽侯县| 白沙| 原阳县| 曲阳县| 施甸县| 关岭| 定州市| 凤山县| 通江县| 册亨县| 安吉县| 鹤壁市| 土默特左旗| 微山县| 开鲁县| 柳州市| 丰县|