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

爱被打了一巴掌 2022-04-15 03:36 453阅读 0赞

1、

复制代码

  1. List<Model> list = new List<Model>();
  2. Model zj = new Model();
  3. zj.id = 1;
  4. zj.name = "张三";
  5. ......等等
  6. list.Add(zj);
  7. //List转xml
  8. XmlHelper<Model> Xml = new XmlHelper<Model>();
  9. string XML = Xml.ListToXml(list);

复制代码

最后XML 就是xml格式的字符串。

复制代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Data;
  7. using System.Xml;
  8. using System.Xml.Serialization;
  9. /// <summary>
  10. /// Xml序列化与反序列化
  11. /// </summary>
  12. public class XmlUtil
  13. {
  14. #region 反序列化
  15. /// <summary>
  16. /// 反序列化
  17. /// </summary>
  18. /// <param name="type">类型</param>
  19. /// <param name="xml">XML字符串</param>
  20. /// <returns></returns>
  21. public static object Deserialize(Type type, string xml)
  22. {
  23. try
  24. {
  25. using (StringReader sr = new StringReader(xml))
  26. {
  27. XmlSerializer xmldes = new XmlSerializer(type);
  28. return xmldes.Deserialize(sr);
  29. }
  30. }
  31. catch (Exception e)
  32. {
  33. return null;
  34. }
  35. }
  36. /// <summary>
  37. /// 反序列化
  38. /// </summary>
  39. /// <param name="type"></param>
  40. /// <param name="xml"></param>
  41. /// <returns></returns>
  42. public static object Deserialize(Type type, Stream stream)
  43. {
  44. XmlSerializer xmldes = new XmlSerializer(type);
  45. return xmldes.Deserialize(stream);
  46. }
  47. #endregion
  48. #region 序列化
  49. /// <summary>
  50. /// 序列化
  51. /// </summary>
  52. /// <param name="type">类型</param>
  53. /// <param name="obj">对象</param>
  54. /// <returns></returns>
  55. public static string Serializer(Type type, object obj)
  56. {
  57. MemoryStream Stream = new MemoryStream();
  58. XmlSerializer xml = new XmlSerializer(type);
  59. try
  60. {
  61. //序列化对象
  62. xml.Serialize(Stream, obj);
  63. }
  64. catch (InvalidOperationException)
  65. {
  66. throw;
  67. }
  68. Stream.Position = 0;
  69. StreamReader sr = new StreamReader(Stream);
  70. string str = sr.ReadToEnd();
  71. sr.Dispose();
  72. Stream.Dispose();
  73. return str;
  74. }
  75. #endregion
  76. }

复制代码

  1. 实体对象转换到Xml

复制代码

  1. public class Student
  2. {
  3. public string Name { set; get; }
  4. public int Age { set; get; }
  5. }
  6. Student stu1 = new Student() { Name = "okbase", Age = 10 };
  7. string xml = XmlUtil.Serializer(typeof(Student), stu1);
  8. Console.Write(xml);

复制代码

  1. Xml转换到实体对象

    Student stu2 = XmlUtil.Deserialize(typeof(Student), xml) as Student;
    Console.Write(string.Format(“名字:{0},年龄:{1}”, stu2.Name, stu2.Age));

  2. DataTable转换到Xml

复制代码

  1. // 生成DataTable对象用于测试
  2. DataTable dt1 = new DataTable("mytable"); // 必须指明DataTable名称
  3. dt1.Columns.Add("Dosage", typeof(int));
  4. dt1.Columns.Add("Drug", typeof(string));
  5. dt1.Columns.Add("Patient", typeof(string));
  6. dt1.Columns.Add("Date", typeof(DateTime));
  7. // 添加行
  8. dt1.Rows.Add(25, "Indocin", "David", DateTime.Now);
  9. dt1.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
  10. dt1.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
  11. dt1.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
  12. dt1.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
  13. // 序列化
  14. xml = XmlUtil.Serializer(typeof(DataTable), dt1);
  15. Console.Write(xml);

复制代码

  1. Xml转换到DataTable

复制代码

  1. // 反序列化
  2. DataTable dt2 = XmlUtil.Deserialize(typeof(DataTable), xml) as DataTable;
  3. // 输出测试结果
  4. foreach (DataRow dr in dt2.Rows)
  5. {
  6. foreach (DataColumn col in dt2.Columns)
  7. {
  8. Console.Write(dr[col].ToString() + " ");
  9. }
  10. Console.Write("\r\n");
  11. }

复制代码

  1. List转换到Xml

复制代码

  1. // 生成List对象用于测试
  2. List<Student> list1 = new List<Student>(3);
  3. list1.Add(new Student() { Name = "okbase", Age = 10 });
  4. list1.Add(new Student() { Name = "csdn", Age = 15 });
  5. // 序列化
  6. xml = XmlUtil.Serializer(typeof(List<Student>), list1);
  7. Console.Write(xml);

复制代码

  1. Xml转换到List

    List list2 = XmlUtil.Deserialize(typeof(List), xml) as List;
    foreach (Student stu in list2)
    {

    1. Console.WriteLine(stu.Name + "," + stu.Age.ToString());

    }


原文:http://blog.okbase.net/haobao/archive/62.html

发表评论

表情:
评论列表 (有 0 条评论,453人围观)

还没有评论,来说两句吧...

相关阅读

    相关 序列序列

    个人学习理解 (只是自己默写序列化和反序列的代码以及几个问题) 1.序列化 和 反序列化 1.1 什么是序列化 和 反序列化 或者 你如何理解序列化和