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格式。
注释已经写得很详尽了,我也不知道还需要说明点什么,如果这个小例子能帮到谁的小忙就最好不过了哈~
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!