C#序列化与反序列化对象XML和JSON 详细代码工具

  1. using System.IO;
  2. using System.Text;
  3. using System.Xml.Serialization;
  4. using System.Xml;
  5. using System.Runtime.Serialization.Json;
  6. using System;
  7. namespace cn.ava.PublicsUtil.Util
  8. {
  9. /// <summary>
  10. /// 创建人Rex.liu
  11. /// 创建时间:2015年9月6日 14:48:29
  12. /// 功能:序列化反序列化XML文件
  13. /// </summary>
  14. public class JsonAndXmlSerialization
  15. {
  16. #region 外部调用
  17. /// <summary>
  18. /// 将对象根据格式(XML/JSON)序列化成字符串结果
  19. /// </summary>
  20. /// <param name="o">目标对象</param>
  21. /// <param name="format">输出格式</param>
  22. /// <returns></returns>
  23. public static string Serialize(object o, string format)
  24. {
  25. if (format.ToLower() == "xml")
  26. {
  27. return JsonAndXmlSerialization.XmlSerialize(o);
  28. }
  29. else
  30. {
  31. return JsonAndXmlSerialization.JsonSerialize(o);
  32. }
  33. }
  34. /// <summary>
  35. /// 将字符串根据格式(XML/JSON)反序列化成指定类型的对象
  36. /// </summary>
  37. /// <typeparam name="T">指定类型</typeparam>
  38. /// <param name="s">目标字符串</param>
  39. /// <param name="format">输入格式</param>
  40. /// <returns></returns>
  41. public static T Deserialize<T>( string s, string format)
  42. {
  43. if (format.ToLower() == "xml")
  44. {
  45. return JsonAndXmlSerialization.XmlDeserialize<T>(s);
  46. }
  47. else
  48. {
  49. return JsonAndXmlSerialization.JsonDeserialize<T>(s);
  50. }
  51. }
  52. /// <summary>
  53. /// 对象序列化成文件并保存
  54. /// </summary>
  55. /// <typeparam name="T">对象类型</typeparam>
  56. /// <param name="t">对象实体</param>
  57. /// <param name="path">文件路径</param>
  58. /// <param name="format">格式:json或 xml</param>
  59. /// <returns></returns>
  60. public static bool SerializableFile<T>( object t, string path, string format)
  61. {
  62. if (format.ToLower() == "xml")
  63. {
  64. return JsonAndXmlSerialization.SerializableXML<T>(t, path);
  65. }
  66. else
  67. {
  68. return JsonAndXmlSerialization.SerializableJson<T>(t, path);
  69. }
  70. }
  71. /// <summary>
  72. /// 将文件反序列化成对象
  73. /// </summary>
  74. /// <typeparam name="T">对象类型</typeparam>
  75. /// <param name="path">文件路径</param>
  76. /// <param name="format">格式: json 或 xml</param>
  77. /// <returns></returns>
  78. public static T DeserializeFile<T>( string path, string format)
  79. {
  80. if (format.ToLower() == "xml")
  81. {
  82. return JsonAndXmlSerialization.DeSerializableXML<T>(path);
  83. }
  84. else
  85. {
  86. return JsonAndXmlSerialization.DeSerializableJson<T>(path);
  87. }
  88. }
  89. #endregion
  90. #region 对象的序列化与反序列化
  91. /// <summary>
  92. /// 将object对象序列化成XML
  93. /// </summary>
  94. /// <param name="o"></param>
  95. /// <returns></returns>
  96. private static string XmlSerialize(object o)
  97. {
  98. XmlSerializer ser = new XmlSerializer(o.GetType());
  99. System.IO.MemoryStream mem = new MemoryStream();
  100. XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8);
  101. XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
  102. ns.Add( "", "");
  103. ser.Serialize(writer, o, ns);
  104. writer.Close();
  105. return Encoding.UTF8.GetString(mem.ToArray());
  106. }
  107. /// <summary>
  108. /// 字符串反序列化成对象
  109. /// </summary>
  110. /// <typeparam name="T">对象类型</typeparam>
  111. /// <param name="s">XML值</param>
  112. /// <returns></returns>
  113. private static T XmlDeserialize<T>( string s)
  114. {
  115. XmlDocument xdoc = new XmlDocument();
  116. try
  117. {
  118. xdoc.LoadXml(s);
  119. XmlNodeReader reader = new XmlNodeReader(xdoc.DocumentElement);
  120. XmlSerializer ser = new XmlSerializer( typeof(T));
  121. object obj = ser.Deserialize(reader);
  122. return (T)obj;
  123. }
  124. catch
  125. {
  126. return default(T);
  127. }
  128. }
  129. /// <summary>
  130. /// 对象序列化成Json字符串
  131. /// </summary>
  132. /// <param name="o"></param>
  133. /// <returns></returns>
  134. private static string JsonSerialize(object o)
  135. {
  136. using ( var ms = new MemoryStream())
  137. {
  138. new DataContractJsonSerializer(o.GetType()).WriteObject(ms, o);
  139. return Encoding.UTF8.GetString(ms.ToArray());
  140. }
  141. }
  142. /// <summary>
  143. /// Json字符串反序列化成对象
  144. /// </summary>
  145. /// <typeparam name="T"></typeparam>
  146. /// <param name="s"></param>
  147. /// <returns></returns>
  148. private static T JsonDeserialize<T>( string s)
  149. {
  150. using ( var ms = new MemoryStream(Encoding.UTF8.GetBytes(s)))
  151. {
  152. return (T) new DataContractJsonSerializer( typeof(T)).ReadObject(ms);
  153. }
  154. }
  155. #endregion
  156. #region 将对象保存成文件
  157. /// <summary>
  158. /// 将对象保存为json文件
  159. /// </summary>
  160. /// <typeparam name="T">对象类型</typeparam>
  161. /// <param name="t">对象</param>
  162. /// <param name="path">保存路径</param>
  163. /// <returns></returns>
  164. private static bool SerializableJson<T>( object t, string path)
  165. {
  166. bool bl = false;
  167. try
  168. {
  169. string strjson = JsonSerialize(t);
  170. System.IO.StreamWriter sw = System.IO.File.CreateText(path);
  171. sw.WriteLine(strjson);
  172. sw.Close();
  173. }
  174. catch
  175. {
  176. return bl;
  177. }
  178. return true;
  179. }
  180. /// <summary>
  181. /// 将对象序列化成XML并保存到文件
  182. /// </summary>
  183. /// <returns></returns>
  184. private static bool SerializableXML<T>( object t, string path)
  185. {
  186. bool bl = false;
  187. FileStream fileStream = null;
  188. try
  189. {
  190. if (t != null)
  191. {
  192. //创建xml格式器
  193. XmlSerializer xmls = new XmlSerializer( typeof(T));
  194. //创建文件流
  195. fileStream = new FileStream(path, FileMode.Create);
  196. //将对象序列化到流
  197. xmls.Serialize(fileStream, t);
  198. bl = true;
  199. }
  200. }
  201. catch (Exception ex)
  202. {
  203. throw ex;
  204. }
  205. finally
  206. {
  207. if (fileStream != null)
  208. {
  209. fileStream.Close();
  210. }
  211. }
  212. return bl;
  213. }
  214. #endregion
  215. #region 将文件反序列化成对象
  216. /// <summary>
  217. /// 将文件反序列化json
  218. /// </summary>
  219. /// <typeparam name="T">类型</typeparam>
  220. /// <param name="path">json所存放的路径</param>
  221. /// <returns>实体</returns>
  222. private static T DeSerializableJson<T>( string path)
  223. {
  224. T t = default(T);
  225. try
  226. {
  227. FileInfo fi = new FileInfo(path);
  228. if (fi.Exists)
  229. {
  230. StreamReader sr = new StreamReader(path, Encoding.UTF8);
  231. String line;
  232. StringBuilder strcontent = new StringBuilder();
  233. while ((line = sr.ReadLine()) != null)
  234. {
  235. strcontent.Append(line.ToString());
  236. }
  237. t = JsonAndXmlSerialization.JsonDeserialize<T>(strcontent.ToString());
  238. }
  239. }
  240. catch (Exception ex)
  241. {
  242. throw ex;
  243. }
  244. return t;
  245. }
  246. /// <summary>
  247. /// 将文件反序列化XML
  248. /// </summary>
  249. /// <typeparam name="T">类型</typeparam>
  250. /// <param name="path">XMl所存放的路径</param>
  251. /// <returns>实体</returns>
  252. private static T DeSerializableXML<T>( string path)
  253. {
  254. T t = default(T);
  255. FileStream fileStream = null;
  256. try
  257. {
  258. XmlSerializer xmls = new XmlSerializer( typeof(T));
  259. FileInfo fi = new FileInfo(path);
  260. if (fi.Exists)
  261. {
  262. fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
  263. t = (T)xmls.Deserialize(fileStream);
  264. }
  265. }
  266. catch (Exception ex)
  267. {
  268. throw ex;
  269. }
  270. finally
  271. {
  272. if (fileStream != null)
  273. {
  274. fileStream.Close();
  275. }
  276. }
  277. return t;
  278. }
  279. #endregion
  280. }
  281. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值