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

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

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

定义部分:

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

使用部分:

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

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

定义部分:

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

使用部分:

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

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

上一篇:DotNet的JSON序列化与反序列化


下一篇:AngularJS的简单使用