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格式。
正文曾經寫得很詳盡了,我也不知道還需求闡明點什麼,假如這個小例子能幫到誰的小忙就最好不過了哈~
以上就是本文的全部內容,希望本文的內容對大家的學習或許任務能帶來一定的協助,同時也希望多多支持!