| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
ggkwk
10年前发布

c# XML和实体类之间相互转换(序列化和反序列化)

    using System;        using System.Collections.Generic;        using System.Linq;        using System.Text;        using System.IO;        using System.Data;        using System.Xml;        using System.Xml.Serialization;                 /// <summary>        /// Xml序列化与反序列化        /// </summary>        public class XmlUtil        {            #region 反序列化            /// <summary>            /// 反序列化            /// </summary>            /// <param name="type">类型</param>            /// <param name="xml">XML字符串</param>            /// <returns></returns>            public static object Deserialize(Type type, string xml)            {                try                {                    using (StringReader sr = new StringReader(xml))                    {                        XmlSerializer xmldes = new XmlSerializer(type);                        return xmldes.Deserialize(sr);                    }                }                catch (Exception e)                {                             return null;                }            }            /// <summary>            /// 反序列化            /// </summary>            /// <param name="type"></param>            /// <param name="xml"></param>            /// <returns></returns>            public static object Deserialize(Type type, Stream stream)            {                XmlSerializer xmldes = new XmlSerializer(type);                return xmldes.Deserialize(stream);            }            #endregion                    #region 序列化            /// <summary>            /// 序列化            /// </summary>            /// <param name="type">类型</param>            /// <param name="obj">对象</param>            /// <returns></returns>            public static string Serializer(Type type, object obj)            {                MemoryStream Stream = new MemoryStream();                XmlSerializer xml = new XmlSerializer(type);                try                {                    //序列化对象                    xml.Serialize(Stream, obj);                }                catch (InvalidOperationException)                {                    throw;                }                Stream.Position = 0;                StreamReader sr = new StreamReader(Stream);                string str = sr.ReadToEnd();                                 sr.Dispose();                Stream.Dispose();                         return str;            }                    #endregion        }  

    /* 实体对象转换到Xml */        public class Student        {            public string Name { set; get; }            public int Age { set; get; }        }         Student stu1 = new Student() { Name = "okbase", Age = 10 };        string xml = XmlUtil.Serializer(typeof(Student), stu1);        Console.Write(xml);                        /* Xml转换到实体对象 */        Student stu2 = XmlUtil.Deserialize(typeof(Student), xml) as Student;        Console.Write(string.Format("名字:{0},年龄:{1}", stu2.Name, stu2.Age));                        /* DataTable转换到Xml */        // 生成DataTable对象用于测试        DataTable dt1 = new DataTable("mytable");   // 必须指明DataTable名称         dt1.Columns.Add("Dosage", typeof(int));        dt1.Columns.Add("Drug", typeof(string));        dt1.Columns.Add("Patient", typeof(string));        dt1.Columns.Add("Date", typeof(DateTime));         // 添加行        dt1.Rows.Add(25, "Indocin", "David", DateTime.Now);        dt1.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);        dt1.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);        dt1.Rows.Add(21, "Combivent", "Janet", DateTime.Now);        dt1.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);         // 序列化        xml = XmlUtil.Serializer(typeof(DataTable), dt1);        Console.Write(xml);                        /* Xml转换到DataTable */        // 反序列化        DataTable dt2 = XmlUtil.Deserialize(typeof(DataTable), xml) as DataTable;         // 输出测试结果        foreach (DataRow dr in dt2.Rows)        {            foreach (DataColumn col in dt2.Columns)            {                Console.Write(dr[col].ToString() + " ");            }             Console.Write("\r\n");        }                /* List转换到Xml */        // 生成List对象用于测试        List<Student> list1 = new List<Student>(3);         list1.Add(new Student() { Name = "okbase", Age = 10 });        list1.Add(new Student() { Name = "csdn", Age = 15 });        // 序列化        xml = XmlUtil.Serializer(typeof(List<Student>), list1);        Console.Write(xml);                /* Xml转换到List */        List<Student> list2 = XmlUtil.Deserialize(typeof(List<Student>), xml) as List<Student>;        foreach (Student stu in list2)        {            Console.WriteLine(stu.Name + "," + stu.Age.ToString());        }  

    protected void Page_Load(object sender, EventArgs e)        {            string strTest = @"<Relationships>              <VariationParent xmlns='http://www.microsoft.com/schema/Products/2011-10-01'>                <Identifiers>                  <MarketplaceASIN>                    <MarketplaceId>ATVPDKIKX0DER</MarketplaceId>                    <ASIN>B00K69WURQ</ASIN>                  </MarketplaceASIN>                  <MarketplaceASIN>                    <MarketplaceId>TBVPDKIKX0DER</MarketplaceId>                    <ASIN>C00K69WURQ</ASIN>                  </MarketplaceASIN>                  <MarketplaceASIN>                    <MarketplaceId>KlVPDKIKX0DER</MarketplaceId>                    <ASIN>D00K69WURQ</ASIN>                  </MarketplaceASIN>                </Identifiers>              </VariationParent>            </Relationships>";            TextBox1.Text = "";                    XmlDocument doc = new XmlDocument();            doc.LoadXml(strTest);            XmlElement root = doc.DocumentElement;            //用于带命名空间的XML操作            XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);            nsmgr.AddNamespace("ab", "http://www.microsoft.com/schema/Products/2011-10-01");            XmlNodeList macthNodes = root.SelectNodes("//ab:Identifiers/ab:MarketplaceASIN", nsmgr);                    for (int i = 0; i < macthNodes.Count; i++)            {                //删除生成的命名空间,生成标准XML。                string matchNode = CleanXmlnsTag(macthNodes[i].OuterXml);                MarketplaceASIN ma = XmlUtil.Deserialize(typeof(MarketplaceASIN), matchNode) as MarketplaceASIN;                if (ma != null)                {                    Response.Write(ma.MarketplaceId + "---------" + ma.ASIN + "<br/>");                }            }        }                /* 实体对象 */        public class MarketplaceASIN        {            public string MarketplaceId { set; get; }            public string ASIN { set; get; }        }                protected string CleanXmlnsTag(string xml)        {            xml = xml.Replace("xmlns=\"http://www.microsoft.com/schema/Products/2011-10-01\"", "");            return xml;        }