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

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

以上。 

你可能感兴趣的:(Datatable)