SerializationHelper.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Collections;
  6. using System.Web.Script.Serialization;
  7. using System.Xml;
  8. using System.Xml.Serialization;
  9. using System.IO;
  10. using System.ComponentModel;
  11. namespace Ant.Common
  12. {
  13. /// <summary>
  14. /// JSON,XML和实体相互转换
  15. /// </summary>
  16. public class SerializationHelper
  17. {
  18. /// <summary>
  19. /// 将对象根据格式(XML/JSON)序列化成字符串结果
  20. /// </summary>
  21. /// <param name="o">目标对象</param>
  22. /// <param name="format">输出格式</param>
  23. /// <returns></returns>
  24. public static string Serialize(object o, Format format)
  25. {
  26. return format == Format.Xml ? XmlSerialize(o) : ObjectToJson(o);
  27. }
  28. /// <summary>
  29. /// 将字符串根据格式(XML/JSON)反序列化成指定类型的对象
  30. /// </summary>
  31. /// <typeparam name="T">指定类型</typeparam>
  32. /// <param name="s">目标字符串</param>
  33. /// <param name="format">输入格式</param>
  34. /// <returns></returns>
  35. public static T Deserialize<T>(string s, Format format)
  36. {
  37. return format == Format.Xml ? XmlDeserial<T>(s) : JsonToObject<T>(s);
  38. }
  39. /// <summary>
  40. /// XML转实体
  41. /// </summary>
  42. /// <typeparam name="T"></typeparam>
  43. /// <param name="xml"></param>
  44. /// <returns></returns>
  45. public static T XmlDeserialize<T>(string xml)
  46. {
  47. return XmlDeserial<T>(xml);
  48. }
  49. /// <summary>
  50. /// 对象转JSON
  51. /// </summary>
  52. /// <param name="obj">对象</param>
  53. /// <returns>JSON格式的字符串</returns>
  54. private static string ObjectToJson(object obj)
  55. {
  56. var jss = new JavaScriptSerializer();
  57. try
  58. {
  59. return jss.Serialize(obj);
  60. }
  61. catch (Exception ex)
  62. {
  63. throw new Exception("JSONHelper.ObjectToJSON(): " + ex.Message);
  64. }
  65. }
  66. /// <summary>
  67. /// 实体转成XML格式
  68. /// </summary>
  69. /// <param name="o"></param>
  70. /// <returns></returns>
  71. private static string XmlSerialize(object o)
  72. {
  73. using (var ms = new MemoryStream())
  74. {
  75. var serializer = new XmlSerializer(o.GetType());
  76. serializer.Serialize(ms, o);
  77. ms.Seek(0, SeekOrigin.Begin);
  78. using (var reader = new StreamReader(ms, Encoding.UTF8))
  79. {
  80. return reader.ReadToEnd();
  81. }
  82. }
  83. }
  84. /// <summary>
  85. /// JSON转实体
  86. /// </summary>
  87. /// <typeparam name="T"></typeparam>
  88. /// <param name="jsonText"></param>
  89. /// <returns></returns>
  90. private static T JsonToObject<T>(string jsonText)
  91. {
  92. var jss = new JavaScriptSerializer();
  93. try
  94. {
  95. return !string.IsNullOrEmpty(jsonText) ? jss.Deserialize<T>(jsonText) : default(T);
  96. }
  97. catch (Exception ex)
  98. {
  99. throw new Exception("JSONToObject(): " + ex.Message);
  100. }
  101. }
  102. /// <summary>
  103. /// XML转实体
  104. /// </summary>
  105. /// <typeparam name="T"></typeparam>
  106. /// <param name="s"></param>
  107. /// <returns></returns>
  108. private static T XmlDeserial<T>(string s)
  109. {
  110. var xdoc = new XmlDocument();
  111. try
  112. {
  113. string str = "<?xml version='1.0' encoding='utf-8'?><AppSettings>" + s + "</AppSettings>";
  114. xdoc.LoadXml(str);
  115. if (xdoc.DocumentElement != null)
  116. {
  117. var reader = new XmlNodeReader(xdoc.DocumentElement);
  118. var ser = new XmlSerializer(typeof(T));
  119. var obj = ser.Deserialize(reader);
  120. return (T)obj;
  121. }
  122. }
  123. catch (Exception ex)
  124. {
  125. return default(T);
  126. }
  127. return default(T);
  128. }
  129. /// <summary>
  130. /// JOSN数据过滤
  131. /// </summary>
  132. /// <param name="s"></param>
  133. /// <returns></returns>
  134. public static string stringToJson(string s)
  135. {
  136. //Microsoft.JScript.GlobalObject.escape(strJS);
  137. string sb = "";
  138. sb=s.Replace("/", "\\/");
  139. sb = sb.Replace("\"", "\\\"");
  140. sb = sb.Replace("\b", "\\b");
  141. sb = sb.Replace("\f", "\\f");
  142. sb = sb.Replace("\n", "\\n");
  143. sb = sb.Replace("\r", "\\r");
  144. sb = sb.Replace("\t", "\\t");
  145. return sb;
  146. }
  147. }
  148. public enum Format
  149. {
  150. [Description("Xml")]
  151. Xml = 1,
  152. [Description("Json")]
  153. Json = 2
  154. }
  155. }