最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中把任意類型的泛型集合轉(zhuǎn)換成SQLXML數(shù)據(jù)格式的實(shí)例

 更新時(shí)間:2016年12月12日 10:02:55   作者:弎吩鍾熱℃  
本文主要分享了C#中把任意類型的泛型集合轉(zhuǎn)換成SQLXML數(shù)據(jù)格式的實(shí)例代碼。具有很好的參考價(jià)值,需要的朋友可以看下

話不多說(shuō),跟著小編一起來(lái)看下吧

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>
  /// 泛型轉(zhuǎn)換類
  /// </summary>
  static class GenericConver
  {
   /// <summary>
   /// 集合轉(zhuǎn)換成SQLXML
   /// </summary>
   /// <typeparam name="T">泛型參數(shù)(集合成員的類型)</typeparam>
   /// <param name="TCollection">泛型集合</param>
   /// <returns></returns>
   public static SqlXml CollectionToSqlXml<T>(IEnumerable<T> TCollection)
   {
    //先把集合轉(zhuǎn)換成數(shù)據(jù)表,然后把數(shù)據(jù)表轉(zhuǎn)換成SQLXML
    return DataTableToSqlXml(CollectionToDataTable(TCollection));
   }
   /// <summary>
   /// 集合轉(zhuǎn)換成數(shù)據(jù)表
   /// </summary>
   /// <typeparam name="T">泛型參數(shù)(集合成員的類型)</typeparam>
   /// <param name="TCollection">泛型集合</param>
   /// <returns></returns>
   public static DataTable CollectionToDataTable<T>(IEnumerable<T> TCollection)
   {
    //獲取泛型的具體類型
    Type type = typeof(T);
    //獲取類型的公共屬性
    PropertyInfo[] properties = type.GetProperties();
    //創(chuàng)建數(shù)據(jù)表,表名為類型名稱
    DataTable table = new DataTable(type.Name);
    //把公共屬性轉(zhuǎn)行成表格列,再把表格列添加到表格中
    foreach (var property in properties)
    {
     //創(chuàng)建一個(gè)表格列,列名為屬性名,列數(shù)據(jù)類型為屬性的類型
     DataColumn column = new DataColumn(property.Name, property.PropertyType);
     //把表格列添加到表格中
     table.Columns.Add(column);
    }
    //把泛型集合元素添加到數(shù)據(jù)行中
    foreach (var item in TCollection)
    {
     //創(chuàng)建和表格行架構(gòu)相同的表格行
     DataRow row = table.NewRow();
     //讀取元素所有屬性列的值,并根據(jù)屬性名稱,把屬性值添加到表格行中
     foreach (var property in properties)
      row[property.Name] = property.GetValue(item, null);
     //把表格行添加到表格中
     table.Rows.Add(row);
    }
    return table;
   }
   /// <summary>
   /// 數(shù)據(jù)表轉(zhuǎn)換成SQLXML
   /// </summary>
   /// <param name="table">數(shù)據(jù)表</param>
   /// <returns></returns>
   public static SqlXml DataTableToSqlXml(DataTable table)
   {
    SqlXml xml;
    //如果表格名為空,則設(shè)置表格名
    if (string.IsNullOrEmpty(table.TableName))
     table.TableName = "TableName";
    //把數(shù)據(jù)表轉(zhuǎn)換成XML
    using (var ms = new MemoryStream())
    {
     //把數(shù)據(jù)表轉(zhuǎn)換成XML格式,并寫入內(nèi)存流
     table.WriteXml(ms);
     //把內(nèi)存流讀取標(biāo)記設(shè)置回起點(diǎn)
     ms.Position = 0;
     //使用XmlReader讀取內(nèi)存流,并創(chuàng)建一個(gè)SqlXml對(duì)象
     xml = new SqlXml(XmlReader.Create(ms));
    }
    return xml;
   }
  }
  /// <summary>
  /// 人類(測(cè)試數(shù)據(jù)類)
  /// </summary>
  class Person
  {
   /// <summary>
   /// 構(gòu)造函數(shù)
   /// </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; }
  }
 }
}

輸出結(jié)果:

<DocumentElement>
 <Person>
 <Name>李元芳</Name>
 <Age>23</Age>
 </Person>
 <Person>
 <Name>狄仁杰</Name>
 <Age>32</Age>
 </Person>
</DocumentElement>

主要是通過反射,讀取泛型類型的屬性,然后根據(jù)讀取到的屬性生成數(shù)據(jù)表,再把數(shù)據(jù)表轉(zhuǎn)換成XML格式。

注釋已經(jīng)寫得很詳盡了,我也不知道還需要說(shuō)明點(diǎn)什么,如果這個(gè)小例子能幫到誰(shuí)的小忙就最好不過了哈~

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • C#隨機(jī)生成Unicode類型字符串

    C#隨機(jī)生成Unicode類型字符串

    做測(cè)試時(shí)經(jīng)常需要生成一些隨機(jī)數(shù)據(jù),最常見的就是生成隨機(jī)字符串。而且往往要生成Unicode字符串,有時(shí)還要特別指定生成的字符的語(yǔ)言范圍。下面是我覺得比較靈活的方法:
    2013-04-04
  • C#實(shí)現(xiàn)HTTP上傳文件的方法

    C#實(shí)現(xiàn)HTTP上傳文件的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)HTTP上傳文件的方法,包括了發(fā)送文件與接收文件的實(shí)現(xiàn)代碼,具有不錯(cuò)的參考價(jià)值,需要的朋友可以參考下
    2014-11-11
  • 通過C#代碼輕松提取PDF文本

    通過C#代碼輕松提取PDF文本

    提取PDF中的文本可以幫助我們對(duì)PDF文檔進(jìn)行內(nèi)容再利用,從而制作新的PDF文檔或?qū)?nèi)容插入到其他格式的文檔中,下面我們就來(lái)看看如何使用C#代碼提取PDF文本吧
    2024-11-11
  • Unity實(shí)現(xiàn)俄羅斯方塊(三)

    Unity實(shí)現(xiàn)俄羅斯方塊(三)

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)俄羅斯方塊的第一部分代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C# Onnx實(shí)現(xiàn)輕量實(shí)時(shí)的M-LSD直線檢測(cè)

    C# Onnx實(shí)現(xiàn)輕量實(shí)時(shí)的M-LSD直線檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了C#如何結(jié)合Onnx實(shí)現(xiàn)輕量實(shí)時(shí)的M-LSD直線檢測(cè),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • 基于字符集、字符編碼與HTTP編碼解碼之萬(wàn)象詳解

    基于字符集、字符編碼與HTTP編碼解碼之萬(wàn)象詳解

    本篇文章小編為大家介紹,基于字符集、字符編碼與HTTP編碼解碼之萬(wàn)象詳解。需要的朋友參考下
    2013-04-04
  • 詳解C#正則表達(dá)式Regex常用匹配

    詳解C#正則表達(dá)式Regex常用匹配

    這篇文章主要介紹了C#正則表達(dá)式Regex常用匹配,利用Regex類實(shí)現(xiàn)驗(yàn)證,感興趣的小伙伴們可以參考一下
    2015-12-12
  • C#實(shí)現(xiàn)前向最大匹、字典樹(分詞、檢索)的示例代碼

    C#實(shí)現(xiàn)前向最大匹、字典樹(分詞、檢索)的示例代碼

    這篇文章主要介紹了C#實(shí)現(xiàn)前向最大匹、字典樹的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C#實(shí)現(xiàn)向數(shù)組指定索引位置插入新的元素值

    C#實(shí)現(xiàn)向數(shù)組指定索引位置插入新的元素值

    這篇文章給大家介紹了利用C#實(shí)現(xiàn)向數(shù)組指定索引位置插入新的元素值,首先需要定義一個(gè)一維數(shù)組,然后修改數(shù)組的長(zhǎng)度,從而在其中增加一個(gè)元素,需要的朋友可以參考下
    2024-02-02
  • C#多線程死鎖介紹與案例代碼

    C#多線程死鎖介紹與案例代碼

    這篇文章介紹了C#多線程的死鎖,并使用案例代碼實(shí)現(xiàn)解決方案,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04

最新評(píng)論

南城县| 临江市| 忻州市| 北海市| 江华| 龙山县| 青海省| 繁昌县| 夹江县| 芒康县| 康保县| 吉木乃县| 宜丰县| 博爱县| 岱山县| 承德县| 桃园市| 忻城县| 临江市| 新乐市| 澎湖县| 武强县| 昭觉县| 钟山县| 老河口市| 临海市| 富顺县| 定兴县| 建宁县| 手游| 贵定县| 克山县| 揭西县| 哈巴河县| 潢川县| 阿克苏市| 岑溪市| 西昌市| 仪征市| 无棣县| 桂东县|