Asp.net MVC后台 XML、DataTable、DataSet之间的数据转换

最近在做项目,这几天遇到的问题要用到几个数据转换,特此记录一下。

1.DataTable转换为XML的三种方式

        public static string DataTableToXml(this DataTable dt)
        {
            ////第一种  返回的XML字符串比较干净,DataTable行中数据为空的没有写入到XML字符串中
            System.IO.TextWriter tw = new System.IO.StringWriter();
            dt.WriteXml(tw);
            return tw.ToString();
            
            ////第二种  同第一种
            MemoryStream ms = null;
            XmlTextWriter XmlWt = null;
            ms = new MemoryStream();
            ////根据ms实例化XmlWt
            XmlWt = new XmlTextWriter(ms, Encoding.Unicode);
            ////获取ds中的数据
         dt.WriteXml(XmlWt);
            int count = (int)ms.Length;
            byte[] temp = new byte[count];
            ms.Seek(0, SeekOrigin.Begin);
            ms.Read(temp, 0, count);
            ////返回Unicode编码的文本
        UnicodeEncoding ucode = new UnicodeEncoding();
            string returnValue = ucode.GetString(temp).Trim();
            return returnValue;
            

            ///第三种   返回的XML字符串比较复杂,包括了DataTable中各个Column的定义,以及字段类型,当然还包括DataTable行值,以及其他属性
            StringBuilder sb = new StringBuilder();
            XmlWriter writer = XmlWriter.Create(sb);
            XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
            serializer.Serialize(writer, dt);
            writer.Close();
            return sb.ToString();


        }

2.XML字符串转换为DataTable

        public static DataSet XMLToDataTable(this string StrData)
        {
            if (!string.IsNullOrEmpty(StrData))
            {
                XmlDocument xmlDoc = new XmlDocument();
                DataSet ds = new DataSet();
                try
                {
                    xmlDoc.LoadXml(StrData);
                    ds.ReadXml(GetStream(xmlDoc.OuterXml));
                    return ds;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            else
            {
                return null;
            }
        }

  其中用到GetStream方法如下

        public static StreamReader GetStream(this string xmlStr)
        {
            byte[] tempByte = Encoding.UTF8.GetBytes(xmlStr);
            MemoryStream stream = new MemoryStream(tempByte);
            //stream.Position = 0;
            StreamReader streamReader = new StreamReader(stream);
            return streamReader;
        }

  上面的方法只是将XMl字符串读入到DataSet中,然后再冲DataSet中查找先前定义过的DataTable即可。

DataTable转换为XML字符串调用即为 

DataTable dt= new DataTable("Test");
string  XmlData=dt.DataTableToXml();

  XML字符串转换为DataTable

string XmlData="此处为XML字符串";
DataTable dt=XmlData.XMLToDataTable().Tables["Test"];

 此两个方法暂时都用了自定义扩展方法。

以上。 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术博客

Dynamic 动态类型 和双问号??的使用

1.dynamic关键字用于声明一个动态对象,然后通过该动态对象去调用方法或读写属性。以前我们都是在运行时通过反射,Emit,CodeDom等技术来完成。创建一...

1932
来自专栏菩提树下的杨过

Silverlight与WPF中BeginInvoke的差异

Silverlight/WPF中,如果要在多线程中对界面控件值做修改,用Dispatcher对象的BeginInvoke方法无疑是最方便的办法 ,见:温故而知新...

2248
来自专栏landv

从零开始学习C#——HelloWorld(一)

1425
来自专栏GreenLeaves

C#核编之内建数据类型

这个随笔中的重点之一是说明:C#中所提供的关键字都是相应系统类型的简化符号(如int是System.Int32类型的简化符号) 一、内建数据类型与层级结构 所有...

2426
来自专栏Java后端技术

22中编程语言的HelloWorld

741
来自专栏菩提树下的杨过

数据结构C#版笔记--堆栈(Stack)

堆栈(Stack)最明显的特征就是“先进后出”,本质上讲堆栈也是一种线性结构,符合线性结构的基本特点:即每个节点有且只有一个前驱节点和一个后续节点。 相对前面学...

2279
来自专栏码云1024

C#反射

2903
来自专栏飞扬的花生

集合中随机取不重复的索引

有时候希望从一个集合中随机取n个元素不重复 那么就取到这n个数字的索引 public static int[] GetRandomArray(int Numb...

3218
来自专栏技术博客

一步一步学Linq to sql(一):预备知识

  Linq to sql(或者叫DLINQ)是LINQ(.NET语言集成查询)的一部分,全称基于关系数据的 .NET 语言集成查询,用于以对象形式管理关系数据...

921
来自专栏hbbliyong

C#基础知识回顾-- 反射(3)

获取Type对象的构造函数: 前一篇因为篇幅问题因为篇幅太短被移除首页,反射这一块还有一篇“怎样在程序集中使用反射”, 其他没有什么可以写的了,前两篇主要是铺...

2916

扫码关注云+社区

领取腾讯云代金券