XML反序列化实体类

前端之家收集整理的这篇文章主要介绍了XML反序列化实体类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我们的生活有太多无奈,我们无法改变,也无力去改变,更糟的是,我们失去了改变的想法。


实体类

BaseInfo.cs

  1. public class BaseInfo
  2. {
  3. List<Person> perList = new List<Person>();
  4.  
  5. [XmlElement(ElementName = "Person")]
  6. public List<Person> PerList
  7. {
  8. get { return perList; }
  9. set { perList = value; }
  10. }
  11. }

Book.cs

  1. public class Book
  2. {
  3. string isbn;
  4. string title;
  5.  
  6. public Book() { }
  7.  
  8. public Book(string isbn,string title)
  9. {
  10. this.isbn = isbn;
  11. this.title = title;
  12. }
  13.  
  14. public string ISBN
  15. {
  16. get { return isbn; }
  17. set { isbn = value; }
  18. }
  19.  
  20. public string Title
  21. {
  22. get { return title; }
  23. set { title = value; }
  24. }
  25. }

Books.cs

  1. public class Books
  2. {
  3. List<Book> bookList = new List<Book>();
  4.  
  5. [XmlElement(ElementName = "Book")]
  6. public List<Book> BookList
  7. {
  8. get { return bookList; }
  9. set { bookList = value; }
  10. }
  11. }

Person.cs

  1. public class Person
  2. {
  3. string name;
  4. int age;
  5. List<Books> bookList = new List<Books>();
  6.  
  7. /// <summary>
  8. /// 必须有默认的构造函数
  9. /// </summary>
  10. public Person()
  11. { }
  12.  
  13. public Person(string name,int age)
  14. {
  15. this.name = name;
  16. this.age = age;
  17. }
  18.  
  19. public string Name
  20. {
  21. get { return name; }
  22. set { name = value; }
  23. }
  24.  
  25. public int Age
  26. {
  27. get { return age; }
  28. set { age = value; }
  29. }
  30.  
  31. [XmlElement(ElementName = "Books")]
  32. public List<Books> BookList
  33. {
  34. get { return bookList; }
  35. set { bookList = value; }
  36. }
  37. }

Game.cs和Order.cs

  1. public class Game
  2. {
  3. [XmlElement("no")]
  4. public string No { get; set; }
  5. [XmlElement("pwd")]
  6. public string Pwd { get; set; }
  7. [XmlElement("extime")]
  8. public string Extime { get; set; }
  9. }
  10.  
  11.  
  12. [XmlRoot("order")]
  13. public class Order
  14. {
  15. [XmlElement("id")]
  16. public string Id { get; set; }
  17. [XmlElement("cid")]
  18. public string Cid { get; set; }
  19. [XmlElement("cnum")]
  20. public string Cnum { get; set; }
  21. [XmlElement("cash")]
  22. public string Cash { get; set; }
  23. [XmlElement("name")]
  24. public string Name { get; set; }
  25.  
  26. [XmlArray("games")]
  27. [XmlArrayItem("game")]
  28. public List<Game> GameList { get; set; }
  29. }

XmlUtils.cs

  1. public class XmlUtil
  2. {
  3. #region 反序列化
  4.  
  5. /// <summary>
  6. /// 反序列化
  7. /// </summary>
  8. /// <param name="type">类型</param>
  9. /// <param name="xml">XML字符串</param>
  10. /// <returns></returns>
  11. public static object Deserialize(Type type,string xml)
  12. {
  13. try
  14. {
  15. using (var sr = new StringReader(xml))
  16. {
  17. var xmldes = new XmlSerializer(type);
  18.  
  19. return xmldes.Deserialize(sr);
  20. }
  21. }
  22.  
  23. catch (Exception e)
  24. {
  25. return null;
  26. }
  27. }
  28.  
  29. /// <summary>
  30. /// 反序列化
  31. /// </summary>
  32. /// <param name="type"></param>
  33. /// <param name="xml"></param>
  34. /// <returns></returns>
  35. public static object Deserialize(Type type,Stream stream)
  36. {
  37. var xmldes = new XmlSerializer(type);
  38.  
  39. return xmldes.Deserialize(stream);
  40. }
  41.  
  42. #endregion
  43.  
  44. #region 序列化XML文件
  45.  
  46. /// <summary>
  47. /// 序列化XML文件
  48. /// </summary>
  49. /// <param name="type">类型</param>
  50. /// <param name="obj">对象</param>
  51. /// <returns></returns>
  52. public static string Serializer(Type type,object obj)
  53. {
  54. var Stream = new MemoryStream();
  55.  
  56. //创建序列化对象
  57.  
  58. var xml = new XmlSerializer(type);
  59.  
  60. try
  61. {
  62. //序列化对象
  63.  
  64. xml.Serialize(Stream,obj);
  65. }
  66.  
  67. catch (InvalidOperationException)
  68. {
  69. throw;
  70. }
  71.  
  72. Stream.Position = 0;
  73.  
  74. var sr = new StreamReader(Stream);
  75.  
  76. string str = sr.ReadToEnd();
  77.  
  78. return str;
  79. }
  80.  
  81. #endregion
  82.  
  83. #region 将XML转换为DATATABLE
  84.  
  85. /// <summary>
  86. /// 将XML转换为DATATABLE
  87. /// </summary>
  88. /// <param name="FileURL"></param>
  89. /// <returns></returns>
  90. public static DataTable XmlAnalysisArray()
  91. {
  92. try
  93. {
  94. string FileURL = ConfigurationManager.AppSettings["Client"];
  95.  
  96. var ds = new DataSet();
  97.  
  98. ds.ReadXml(FileURL);
  99.  
  100. return ds.Tables[0];
  101. }
  102.  
  103. catch (Exception ex)
  104. {
  105. HttpContext.Current.Response.Write(ex.Message);
  106.  
  107. return null;
  108. }
  109. }
  110.  
  111. /// <summary>
  112. /// 将XML转换为DATATABLE
  113. /// </summary>
  114. /// <param name="FileURL"></param>
  115. /// <returns></returns>
  116. public static DataTable XmlAnalysisArray(string FileURL)
  117. {
  118. try
  119. {
  120. var ds = new DataSet();
  121.  
  122. ds.ReadXml(FileURL);
  123.  
  124. return ds.Tables[0];
  125. }
  126.  
  127. catch (Exception ex)
  128. {
  129. HttpContext.Current.Response.Write(ex.Message);
  130.  
  131. return null;
  132. }
  133. }
  134.  
  135. #endregion
  136.  
  137. #region 获取对应XML节点的值
  138.  
  139. /// <summary>
  140. /// 摘要:获取对应XML节点的值
  141. /// </summary>
  142. /// <param name="stringRoot">XML节点的标记</param>
  143. /// <returns>返回获取对应XML节点的值</returns>
  144. public static string XmlAnalysis(string stringRoot,string xml)
  145. {
  146. if (stringRoot.Equals("") == false)
  147. {
  148. try
  149. {
  150. var XmlLoad = new XmlDocument();
  151.  
  152. XmlLoad.LoadXml(xml);
  153.  
  154. return XmlLoad.DocumentElement.SelectSingleNode(stringRoot).InnerXml.Trim();
  155. }
  156.  
  157. catch (Exception ex)
  158. {
  159. }
  160. }
  161.  
  162. return "";
  163. }
  164.  
  165. #endregion
  166. }

Index.aspx内容:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <title></title>
  6. </head>
  7. <body>
  8. <form id="form1" runat="server">
  9. <div>
  10.  
  11. <asp:Button ID="btnParse" runat="server" Text="XML反序列化一" onclick="btnParse_Click" />
  12.  
  13. <asp:Button ID="btnTwoParse" runat="server" Text="XML反序列化二" onclick="btnTwoParse_Click" />
  14.  
  15. </div>
  16. </form>
  17. </body>
  18. </html>

Index.aspx.cs代码:

  1. public partial class Index : System.Web.UI.Page
  2. {
  3. protected void Page_Load(object sender,EventArgs e)
  4. {
  5.  
  6.  
  7. }
  8.  
  9. protected void btnParse_Click(object sender,EventArgs e)
  10. {
  11. string xmlStr = @"<order>
  12. <id>1990000000</id>
  13. <cid>11111111</cid>
  14. <cnum>2</cnum>
  15. <cash>20</cash>
  16. <name>生化危机</name>
  17. <games>
  18. <game>
  19. <no>21000000</no>
  20. <pwd>123456</pwd>
  21. <extime>2020-01-23</extime>
  22. </game>
  23. <game>
  24. <no>21000001</no>
  25. <pwd>234567</pwd>
  26. <extime>2020-01-23</extime>
  27. </game>
  28. </games>
  29. </order> ";
  30.  
  31. Order order = (Order)XmlUtil.Deserialize(typeof(Order),xmlStr);
  32. Response.Write("ID="+order.Id+"<br/>"+
  33. "name="+order.Name+"<br/>"+
  34. "game一的no="+order.GameList[0].No+"<br/>"+
  35. "game一的pwd=" + order.GameList[0].Pwd + "<br/>" +
  36. "game二的no=" + order.GameList[1].No + "<br/>" +
  37. "game二的pwd=" + order.GameList[1].Pwd + "<br/>"
  38. );
  39. }
  40.  
  41. protected void btnTwoParse_Click(object sender,EventArgs e)
  42. {
  43. string xmlStr = @"<BaseInfo>
  44. <Person>
  45. <Name>小明</Name>
  46. <Age>16</Age>
  47. <Books>
  48. <Book>
  49. <ISBN>123</ISBN>
  50. <Title>借的书1</Title>
  51. </Book>
  52. </Books>
  53. </Person>
  54. <Person>
  55. <Name>小红</Name>
  56. <Age>18</Age>
  57. <Books>
  58. <Book>
  59. <ISBN>456</ISBN>
  60. <Title>借的书2</Title>
  61. </Book>
  62. <Book>
  63. <ISBN>789</ISBN>
  64. <Title>借的书3</Title>
  65. </Book>
  66. </Books>
  67. </Person>
  68. </BaseInfo>";
  69.  
  70.  
  71. XmlSerializer xmlSearializer = new XmlSerializer(typeof(BaseInfo));
  72. StringReader sr = new StringReader(xmlStr);
  73. BaseInfo info = (BaseInfo)xmlSearializer.Deserialize(sr);
  74. foreach (Person per in info.PerList)
  75. {
  76. Response.Write("人员:");
  77. Response.Write(" 姓名:" + per.Name+"<br />");
  78. Response.Write(" 年龄:" + per.Age + "<br />");
  79. foreach (Books b1 in per.BookList)
  80. {
  81. foreach (Book b in b1.BookList)
  82. {
  83. Response.Write(" 书:");
  84. Response.Write(" ISBN:" + b.ISBN + "<br />");
  85. Response.Write(" 书名:" + b.Title + "<br />");
  86. }
  87. }
  88. Response.Write("<hr />");
  89. }
  90. }
  91. }

运行结果如图:


猜你在找的XML相关文章