关键词搜索

源码搜索 ×
×

C# 实体类序列化与反序列化二 (DataContractSerializer)

发布2015-09-14浏览6375次

详情内容

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.Serialization;
  6. using System.IO;
  7. using System.Xml;
  8. namespace Common.Utility.XMLSerialization
  9. {
  10. /// <summary>
  11. /// DataContractSerializer
  12. /// </summary>
  13. /// <typeparam name="T"></typeparam>
  14. public class DataContractSerializer<T>
  15. {
  16. /// <summary>
  17. /// 实体序列化成xml string
  18. /// </summary>
  19. /// <param name="meta"></param>
  20. /// <returns></returns>
  21. public static string ToXMLString(T meta)
  22. {
  23. DataContractSerializer dcs = new DataContractSerializer(typeof(T));
  24. string xmlStr = string.Empty;
  25. using (MemoryStream ms = new MemoryStream())
  26. {
  27. try
  28. {
  29. dcs.WriteObject(ms, meta);
  30. xmlStr = Encoding.UTF8.GetString(ms.ToArray());
  31. ms.Close();
  32. }
  33. catch
  34. {
  35. throw;
  36. }
  37. }
  38. return xmlStr;
  39. }
  40. /// <summary>
  41. /// DataContract序列化
  42. /// </summary>
  43. /// <param name="value"></param>
  44. /// <param name="knownTypes">已知类型的集合</param>
  45. /// <returns></returns>
  46. public static string ToXMLString(object value, IEnumerable<Type> knownTypes = null)
  47. {
  48. try
  49. {
  50. DataContractSerializer dataContractSerializer = new DataContractSerializer(value.GetType(), knownTypes);
  51. using (MemoryStream ms = new MemoryStream())
  52. {
  53. dataContractSerializer.WriteObject(ms, value);
  54. ms.Seek(0, SeekOrigin.Begin);
  55. using (StreamReader sr = new StreamReader(ms))
  56. {
  57. return sr.ReadToEnd();
  58. }
  59. }
  60. }
  61. catch
  62. {
  63. throw;
  64. }
  65. }
  66. /// <summary>
  67. /// 实体反序列化
  68. /// </summary>
  69. /// <param name="xml"></param>
  70. /// <returns></returns>
  71. public static T ReadFromXML(string xmlStr)
  72. {
  73. T meta;
  74. try
  75. {
  76. DataContractSerializer dcs = new DataContractSerializer(typeof(T));
  77. using (TextReader reader = new StringReader(xmlStr))
  78. {
  79. using (XmlReader xReader = XmlReader.Create(reader))
  80. {
  81. meta = (T)dcs.ReadObject(xReader);
  82. }
  83. }
  84. }
  85. catch
  86. {
  87. throw;
  88. }
  89. return meta;
  90. }
  91. /// <summary>
  92. /// 实体反序列化
  93. /// </summary>
  94. /// <param name="xmlStr"></param>
  95. /// <param name="knownTypes">IEnumerable<Type></param>
  96. /// <returns></returns>
  97. public static T ReadFromXML(string xmlStr, IEnumerable<Type> knownTypes = null)
  98. {
  99. T meta;
  100. try
  101. {
  102. DataContractSerializer dcs = new DataContractSerializer(typeof(T), knownTypes);
  103. using (TextReader reader = new StringReader(xmlStr))
  104. {
  105. using (XmlReader xReader = XmlReader.Create(reader))
  106. {
  107. meta = (T)dcs.ReadObject(xReader);
  108. }
  109. }
  110. }
  111. catch
  112. {
  113. throw;
  114. }
  115. return meta;
  116. }
  117. }
  118. }

拓展:点击打开链接

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载