C#中把任意类型的泛型集合转换成SQLXML数据格式的实例
话不多说,跟着小编一起来看下吧
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Data.SqlTypes;
usingSystem.Data;
usingSystem.Reflection;
usingSystem.IO;
usingSystem.Xml;
namespaceCollectionToXml
{
classProgram
{
staticvoidMain(string[]args)
{
//persons可替换为任何泛型集合
varpersons=new[]{
newPerson("李元芳",23),
newPerson("狄仁杰",32)
};
SqlXmlsqlXml=GenericConver.CollectionToSqlXml(persons);
Console.WriteLine(sqlXml.Value);
}
///<summary>
///泛型转换类
///</summary>
staticclassGenericConver
{
///<summary>
///集合转换成SQLXML
///</summary>
///<typeparamname="T">泛型参数(集合成员的类型)</typeparam>
///<paramname="TCollection">泛型集合</param>
///<returns></returns>
publicstaticSqlXmlCollectionToSqlXml<T>(IEnumerable<T>TCollection)
{
//先把集合转换成数据表,然后把数据表转换成SQLXML
returnDataTableToSqlXml(CollectionToDataTable(TCollection));
}
///<summary>
///集合转换成数据表
///</summary>
///<typeparamname="T">泛型参数(集合成员的类型)</typeparam>
///<paramname="TCollection">泛型集合</param>
///<returns></returns>
publicstaticDataTableCollectionToDataTable<T>(IEnumerable<T>TCollection)
{
//获取泛型的具体类型
Typetype=typeof(T);
//获取类型的公共属性
PropertyInfo[]properties=type.GetProperties();
//创建数据表,表名为类型名称
DataTabletable=newDataTable(type.Name);
//把公共属性转行成表格列,再把表格列添加到表格中
foreach(varpropertyinproperties)
{
//创建一个表格列,列名为属性名,列数据类型为属性的类型
DataColumncolumn=newDataColumn(property.Name,property.PropertyType);
//把表格列添加到表格中
table.Columns.Add(column);
}
//把泛型集合元素添加到数据行中
foreach(variteminTCollection)
{
//创建和表格行架构相同的表格行
DataRowrow=table.NewRow();
//读取元素所有属性列的值,并根据属性名称,把属性值添加到表格行中
foreach(varpropertyinproperties)
row[property.Name]=property.GetValue(item,null);
//把表格行添加到表格中
table.Rows.Add(row);
}
returntable;
}
///<summary>
///数据表转换成SQLXML
///</summary>
///<paramname="table">数据表</param>
///<returns></returns>
publicstaticSqlXmlDataTableToSqlXml(DataTabletable)
{
SqlXmlxml;
//如果表格名为空,则设置表格名
if(string.IsNullOrEmpty(table.TableName))
table.TableName="TableName";
//把数据表转换成XML
using(varms=newMemoryStream())
{
//把数据表转换成XML格式,并写入内存流
table.WriteXml(ms);
//把内存流读取标记设置回起点
ms.Position=0;
//使用XmlReader读取内存流,并创建一个SqlXml对象
xml=newSqlXml(XmlReader.Create(ms));
}
returnxml;
}
}
///<summary>
///人类(测试数据类)
///</summary>
classPerson
{
///<summary>
///构造函数
///</summary>
///<paramname="name">名称</param>
///<paramname="age">年龄</param>
publicPerson(stringname,intage)
{Name=name;Age=age;}
///<summary>
///名称
///</summary>
publicstringName{get;set;}
///<summary>
///年龄
///</summary>
publicintAge{get;set;}
}
}
}
输出结果:
<DocumentElement> <Person> <Name>李元芳</Name> <Age>23</Age> </Person> <Person> <Name>狄仁杰</Name> <Age>32</Age> </Person> </DocumentElement>
主要是通过反射,读取泛型类型的属性,然后根据读取到的属性生成数据表,再把数据表转换成XML格式。
注释已经写得很详尽了,我也不知道还需要说明点什么,如果这个小例子能帮到谁的小忙就最好不过了哈~
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!