• 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"];
    

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

    以上。 

  • 相关阅读:
    python爬虫 --- 简书评论
    python 爬虫 伪装
    pygal的简单使用
    anaconda安装不存在的包
    python爬虫 赶集网
    my.conf 修改编码
    python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作
    基于visual Studio2013解决C语言竞赛题之1021九九乘法表
    基于visual Studio2013解决C语言竞赛题之1020订票
    基于visual Studio2013解决C语言竞赛题之1019填数
  • 原文地址:https://www.cnblogs.com/aehyok/p/2863543.html
Copyright © 2020-2023  润新知