Home  >  Article  >  Backend Development  >  Implement serialization and deserialization conversion between XML and entity classes using C#

Implement serialization and deserialization conversion between XML and entity classes using C#

Y2J
Y2JOriginal
2017-04-27 13:37:493494browse

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=&#39;http://www.microsoft.com/schema/Products/2011-10-01&#39;> 
        <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; 
}

The above is the detailed content of Implement serialization and deserialization conversion between XML and entity classes using C#. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn