C#中把任意類型的泛型集合轉(zhuǎn)換成SQLXML數(shù)據(jù)格式的實(shí)例
話不多說,跟著小編一起來看下吧
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)寫得很詳盡了,我也不知道還需要說明點(diǎn)什么,如果這個(gè)小例子能幫到誰的小忙就最好不過了哈~
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持我們!
上一篇:C#中abstract的用法詳解
欄 目:C#教程
下一篇:詳解C# Socket編程筆記
本文標(biāo)題:C#中把任意類型的泛型集合轉(zhuǎn)換成SQLXML數(shù)據(jù)格式的實(shí)例
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6088.html
您可能感興趣的文章
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并打開的方法
- 01-10C#實(shí)現(xiàn)Winform中打開網(wǎng)頁頁面的方法
- 01-10C#實(shí)現(xiàn)由四周向中心縮小的窗體退出特效
- 01-10Extjs4如何處理后臺(tái)json數(shù)據(jù)中日期和時(shí)間
- 01-10C#中DataGridView常用操作實(shí)例小結(jié)
- 01-10C#編程獲取資源文件中圖片的方法
- 01-10asp.net中XML如何做增刪改查操作
- 01-10C#利用反射技術(shù)實(shí)現(xiàn)去掉按鈕選中時(shí)的邊框效果
- 01-10C#中查找Dictionary中的重復(fù)值的方法
- 01-10C#中TreeView實(shí)現(xiàn)適合兩級(jí)節(jié)點(diǎn)的選中節(jié)點(diǎn)方法


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻 器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery