热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

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);
  }
  /// 
  /// 泛型转换类
  /// 
  static class GenericConver
  {
   /// 
   /// 集合转换成SQLXML
   /// 
   /// 泛型参数(集合成员的类型)
   /// 泛型集合
   /// 
   public static SqlXml CollectionToSqlXml(IEnumerable TCollection)
   {
    //先把集合转换成数据表,然后把数据表转换成SQLXML
    return DataTableToSqlXml(CollectionToDataTable(TCollection));
   }
   /// 
   /// 集合转换成数据表
   /// 
   /// 泛型参数(集合成员的类型)
   /// 泛型集合
   /// 
   public static DataTable CollectionToDataTable(IEnumerable 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;
   }
   /// 
   /// 数据表转换成SQLXML
   /// 
   /// 数据表
   /// 
   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;
   }
  }
  /// 
  /// 人类(测试数据类)
  /// 
  class Person
  {
   /// 
   /// 构造函数
   /// 
   /// 名称
   /// 年龄
   public Person(string name, int age)
   { Name = name; Age = age; }
   /// 
   /// 名称
   /// 
   public string Name { get; set; }
   /// 
   /// 年龄
   /// 
   public int Age { get; set; }
  }
 }
}

输出结果:


 
 李元芳
 23
 
 
 狄仁杰
 32
 

主要是通过反射,读取泛型类型的属性,然后根据读取到的属性生成数据表,再把数据表转换成XML格式。

注释已经写得很详尽了,我也不知道还需要说明点什么,如果这个小例子能帮到谁的小忙就最好不过了哈~

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


推荐阅读
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • SeMITechnologies正在使用矢量搜索引擎Weaviate构建的内容。SeMI的首席执行官兼联合创始人BobvanLuijt说,它是一种独特的AI优先数据库,使用机器学习 ... [详细]
  • OleDbDataAdapter充当DataSet和数据源之间的桥梁,用于检索和保存数据。OleDbDataAdapter通过以下方法提供这个桥接器:使用Fill将数据从数 ... [详细]
  • 动态分页实现
    Code分页存储过程CREATEprocedurePagersqlstrnvarchar(4000),--查询字符串currentpageint,--第N页pagesizeint- ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文是关于自学Android的笔记,包括查看类的源码的方法,活动注册的必要性以及布局练习的重要性。通过学习本文,读者可以了解到在自学Android过程中的一些关键点和注意事项。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • exportdefaultclassIndexextendsComponent{Taro.setNavigationBarTitle({title:this.$rout ... [详细]
author-avatar
宝丫2502933885
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有