C#中把任意类型的泛型集合转换成SQLXML数据格式的实例
作者:弎吩锺熱℃ 发布时间:2022-12-24 08:16:21
标签: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格式。
注释已经写得很详尽了,我也不知道还需要说明点什么,如果这个小例子能帮到谁的小忙就最好不过了哈~
来源:http://www.cnblogs.com/Tench/p/GenericCollectionConverToXml.html


猜你喜欢
- flex 布局算法Flutter 弹性布局的基石 是 flex 和 flexible。理解了这两个 widget,后面的row,column
- 一、过滤器(filter)过滤器处于客户端与Web资源(Servlet、JSP、HTML)之间,客户端与Web资源之间的请求和响应都要通过过
- 小程序获取手机号,后端JAVA解密流程代码微信官方文档获取手机号流程地址,先看下最好方便理解下面步骤实现思路,步骤如下1.前端需先调用官方w
- jwt简介冒泡排序:(Bubble Sort)是一种简单的交换排序。之所以叫做冒泡排序,因为我们可以把每个元素当成一个小气泡,根据气泡大小,
- pom.xml文件需要的内容<dependency> <groupId>re
- 日期显示和选择类库,可以用来选择一段连续的和多个不连续的日期,具体的UI完全抽象出来了,可以高度自定义(GITHUB地址)支持的功能:1、选
- XML的主要用途--数据存储和数据描述--是一个优良的配置文件--相当于一个小型数据库--XML不依赖于任何一种编程语言,是独立的W3C提供
- 本文实例讲述了Android开发中应用程序分享功能。分享给大家供大家参考,具体如下:Intent shareIntent = new Int
- 概念里氏替换原则是任何基类出现的地方,子类一定可以替换它;是建立在基于抽象、多态、继承的基础复用的基石,该原则能够保证系统具有良好的拓展性,
- Intro做项目的时候,页面上有一些敏感信息,需要用“*”隐藏一些比较重要的信息,于是打算写一个通用的方法。Let's do it
- 运行本实例,将显示一个用户登录界面,输入用户名(hpuacm)和密码(1111)后,单击"登录"按钮,将弹出如下图所示的
- 1、应用场景:从一份html文件中或从String(是html内容)中提取纯文本,去掉网页标签;2、代码一:replaceAll搞定//从h
- 写在最前面上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考。Demo是在我上次写的
- 如上图所示,日期显示为"MM月DD日",或者其它格式,比如显示年、月、日 或 年月日带时间,设置如下:1、如下图设置,日
- 使用Eureka实现服务治理作用:实现服务治理(服务注册与发现)简介:Spring Cloud Eureka是Spring Cloud Ne
- 我们知道,编写一个Java程序后,如果想让自己编写的代码可以正常运行,我们便需要对它进行编译和运行,而Java环境变量的配置就显得尤为重要,
- Java环境配置原理详解1.Jdk安装目录文件说明:一般jdk安装目录及路径 \Java\jdk1.7.0_79\lib,里面主要包含以下文
- MongoDB是介于关系数据库和非关系数据库之间的一种产品,文件的存储格式为BSON(一种JSON的扩展),这里就主要介绍Java通过使用m
- 多亏了<include />标签,在Android里,很容易就能做到共享和重用UI组件。在Android开发中,很容易就能创建出
- 介绍记录将elasticsearch集成到spring boot的过程,以及一些简单的应用和helper类使用。接入方式使用spring-b