分享

利用扩展方法重写JSON序列化和反序列化

 昵称10504424 2014-06-23

利用.NET 3.5以后的扩展方法重写JSON序列化和反序列化,在代码可读性和可维护性上更加加强了。

首先是不使用扩展方法的写法

定义部分:

  1. /// <summary>
  2. /// JSON序列化反序列化工具
  3. /// </summary>
  4. public class JSONControl
  5. {
  6. /// <summary>
  7. /// JSON序列化
  8. /// </summary>
  9. /// <typeparam name="T"></typeparam>
  10. /// <param name="_Object"></param>
  11. /// <returns></returns>
  12. public static String JsonSerializer<T>(T _Object)
  13. {
  14. using (MemoryStream TempMemoryStream = new MemoryStream())
  15. {
  16. String MySerializationString = String.Empty;
  17. DataContractJsonSerializer MyDataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
  18. MyDataContractJsonSerializer.WriteObject(TempMemoryStream, _Object);
  19. MySerializationString = Encoding.UTF8.GetString(TempMemoryStream.ToArray());
  20. return MySerializationString;
  21. }
  22. }
  23. /// <summary>
  24. /// 反序列化
  25. /// </summary>
  26. /// <typeparam name="T"></typeparam>
  27. /// <param name="_JsonString"></param>
  28. /// <returns></returns>
  29. public static T JsonDeserializer<T>(String _JsonString)
  30. {
  31. using (MemoryStream TempMemoryStream = new MemoryStream(Encoding.UTF8.GetBytes(_JsonString)))
  32. {
  33. DataContractJsonSerializer MyDataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
  34. return (T)MyDataContractJsonSerializer.ReadObject(TempMemoryStream);
  35. }
  36. }
  37. }

使用部分:

  1. /// <summary>
  2. /// 场景控制对象
  3. /// </summary>
  4. public class SceneControl
  5. {
  6. /// <summary>
  7. /// 临时序列化对象
  8. /// </summary>
  9. [DataContract]
  10. public class TempClass
  11. {
  12. /// <summary>
  13. /// 属性1
  14. /// </summary>
  15. [DataMember(Name = "Property1")]
  16. public String Property1 { get; set; }
  17. /// <summary>
  18. /// 属性2
  19. /// </summary>
  20. [DataMember(Name = "Property2")]
  21. public String Property2 { get; set; }
  22. }
  23. /// <summary>
  24. /// 测试
  25. /// </summary>
  26. public void Test()
  27. {
  28. String JsonString = "{'Property1':'111','Property2':'2'}";
  29. TempClass MyTempClass = JSONControl.JsonDeserializer<TempClass>(JsonString);
  30. }
  31. }

然后是使用扩展方法的写法

定义部分:

  1. /// <summary>
  2. /// JSON序列化反序列化工具
  3. /// </summary>
  4. public static class JSONControl
  5. {
  6. /// <summary>
  7. /// JSON序列化
  8. /// </summary>
  9. /// <typeparam name="T"></typeparam>
  10. /// <param name="_Object"></param>
  11. /// <returns></returns>
  12. public static String ObjectToJson<T>(this T _Object)
  13. {
  14. using (MemoryStream TempMemoryStream = new MemoryStream())
  15. {
  16. String MySerializationString = String.Empty;
  17. DataContractJsonSerializer MyDataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
  18. MyDataContractJsonSerializer.WriteObject(TempMemoryStream, _Object);
  19. MySerializationString = Encoding.UTF8.GetString(TempMemoryStream.ToArray());
  20. return MySerializationString;
  21. }
  22. }
  23. /// <summary>
  24. /// JSON反序列化
  25. /// </summary>
  26. /// <typeparam name="T"></typeparam>
  27. /// <param name="_JsonString"></param>
  28. /// <returns></returns>
  29. public static T JsonToObject<T>(this String _JsonString)
  30. {
  31. using (MemoryStream TempMemoryStream = new MemoryStream(Encoding.UTF8.GetBytes(_JsonString)))
  32. {
  33. DataContractJsonSerializer MyDataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
  34. return (T)MyDataContractJsonSerializer.ReadObject(TempMemoryStream);
  35. }
  36. }
  37. }

使用部分:

  1. /// <summary>
  2. /// 场景控制对象
  3. /// </summary>
  4. public class SceneControl
  5. {
  6. /// <summary>
  7. /// 临时序列化对象
  8. /// </summary>
  9. [DataContract]
  10. public class TempClass
  11. {
  12. /// <summary>
  13. /// 属性1
  14. /// </summary>
  15. [DataMember(Name = "Property1")]
  16. public String Property1 { get; set; }
  17. /// <summary>
  18. /// 属性2
  19. /// </summary>
  20. [DataMember(Name = "Property2")]
  21. public String Property2 { get; set; }
  22. }
  23. /// <summary>
  24. /// 测试
  25. /// </summary>
  26. public void Test()
  27. {
  28. String JsonString = "{'Property1':'111','Property2':'2'}";
  29. TempClass MyTempClass = JsonString.JsonToObject<TempClass>();
  30. }
  31. }

原文地址:http:///post/2014/06/23/利用扩展方法重写JSON序列化和反序列化.aspx

分类: .NET

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多