C#中把任意類型的泛型集合轉換成SQLXML數(shù)據(jù)格式的實例
更新時間:2016年12月12日 10:02:55 作者:弎吩鍾熱℃
本文主要分享了C#中把任意類型的泛型集合轉換成SQLXML數(shù)據(jù)格式的實例代碼。具有很好的參考價值,需要的朋友可以看下
話不多說,跟著小編一起來看下吧
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">泛型參數(shù)(集合成員的類型)</typeparam> /// <param name="TCollection">泛型集合</param> /// <returns></returns> public static SqlXml CollectionToSqlXml<T>(IEnumerable<T> TCollection) { //先把集合轉換成數(shù)據(jù)表,然后把數(shù)據(jù)表轉換成SQLXML return DataTableToSqlXml(CollectionToDataTable(TCollection)); } /// <summary> /// 集合轉換成數(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); //把公共屬性轉行成表格列,再把表格列添加到表格中 foreach (var property in properties) { //創(chuàng)建一個表格列,列名為屬性名,列數(shù)據(jù)類型為屬性的類型 DataColumn column = new DataColumn(property.Name, property.PropertyType); //把表格列添加到表格中 table.Columns.Add(column); } //把泛型集合元素添加到數(shù)據(jù)行中 foreach (var item in TCollection) { //創(chuàng)建和表格行架構相同的表格行 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ù)表轉換成SQLXML /// </summary> /// <param name="table">數(shù)據(jù)表</param> /// <returns></returns> public static SqlXml DataTableToSqlXml(DataTable table) { SqlXml xml; //如果表格名為空,則設置表格名 if (string.IsNullOrEmpty(table.TableName)) table.TableName = "TableName"; //把數(shù)據(jù)表轉換成XML using (var ms = new MemoryStream()) { //把數(shù)據(jù)表轉換成XML格式,并寫入內存流 table.WriteXml(ms); //把內存流讀取標記設置回起點 ms.Position = 0; //使用XmlReader讀取內存流,并創(chuàng)建一個SqlXml對象 xml = new SqlXml(XmlReader.Create(ms)); } return xml; } } /// <summary> /// 人類(測試數(shù)據(jù)類) /// </summary> class Person { /// <summary> /// 構造函數(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; } } } }
輸出結果:
<DocumentElement> <Person> <Name>李元芳</Name> <Age>23</Age> </Person> <Person> <Name>狄仁杰</Name> <Age>32</Age> </Person> </DocumentElement>
主要是通過反射,讀取泛型類型的屬性,然后根據(jù)讀取到的屬性生成數(shù)據(jù)表,再把數(shù)據(jù)表轉換成XML格式。
注釋已經寫得很詳盡了,我也不知道還需要說明點什么,如果這個小例子能幫到誰的小忙就最好不過了哈~
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關文章
winfrom 在業(yè)務層實現(xiàn)事務控制的小例子
winfrom 在業(yè)務層實現(xiàn)事務控制的小例子,需要的朋友可以參考一下2013-03-03C#Windows窗體設計之ContextMenuStrip(鼠標右擊菜單)的使用
這篇文章主要介紹了C#Windows窗體設計之ContextMenuStrip(鼠標右擊菜單)的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07C# websocket及時通信協(xié)議的實現(xiàn)方法示例
說到websocket大家一定不會陌生,WebSocket是HTML5一種新的協(xié)議。下面這篇文章主要給大家介紹了關于C# websocket及時通信協(xié)議的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。2017-11-11unity 如何使用文件流讀取streamingassets下的資源
這篇文章主要介紹了unity 使用文件流讀取streamingassets下的資源操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04