利用.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

利用扩展方法重写JSON序列化和反序列化的更多相关文章

  1. Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解

    Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全   Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...

  2. 在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出MethodArgumentNotValidException异常,因此,只需要在ExceptionHandler类中添加处理对应异常的方法即可。

    在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出Method ...

  3. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

  4. 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变

    在net中json序列化与反序列化   准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...

  5. Newtonsoft.Json 序列化和反序列化 时间格式

    From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...

  6. Newtonsoft.Json 序列化和反序列化 时间格式 [转]

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  7. [转]Newtonsoft.Json 序列化和反序列化 时间格式

    本文转自:http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeObj ...

  8. Newtonsoft.Json 序列化和反序列化 以及时间格式

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  9. Scala中使用 Jackson API 进行JSON序列化和反序列化

    1.  什么是 Json 序列化 和 反序列化 序列化 => 将 Java对象 转换成 json字符串反序列化 => 将 json字符串 转换成 Java对象 2. 依赖包 说明 < ...

随机推荐

  1. Stm32 ADC学习

    stm32 ADC 简介 stm32的ADC是 12位逐次逼近型 模拟数字转换器;它包括18个通道,可以用来测量16个外部通道和2个内部通道.ADC转换的结果存放在16位数据寄存器(ADC规则数据寄存 ...

  2. Day 10 动态参数&名称空间,局部全部.函数嵌套&global nonlocal关键字.

    一.动态参数#形参 有3种动态参数#*args 动态参数,不定长参数def func (*args): print(args,type(args))func(1,2,"alex", ...

  3. git忽略掉文件权限检查

    有时 git diff 执行显示文件内容没变化,但是有 old mode xxx new mode,原因是文件的权限,被chmod变化了,这种变化也被 diff 识别出来了,让git忽略掉文件权限检查 ...

  4. [bug]小程序弹出层滚动穿透问题修复

    如题,解决方案有两种: 1.如果弹出层没有滚动事件,就直接在蒙板和弹出层上加 catchtouchmove;(方便快捷) <template name="popup-modal&quo ...

  5. 非对齐访问(unaligned accesses)

    从CPU角度看内存访问对齐 结构体成员非对齐访问所带来的思考 ARM体系中存储系统非对齐的存储访问操作 什么是cache line? cache line就是处理器从RAM load/store数据到 ...

  6. Jmeter监控系统等资源,ServerAgent端口的本次启动端口修改

    默认情况下在下载的ServerAgent下,如果服务是windows系统,则直接启动"startAgent.bat"即可,如果是Linux系统,则直接启动"./start ...

  7. JavaWeb之Servlet中ServletConfig和ServletContext

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140877.html [正文] 一.ServletConfig:代表当前 ...

  8. OS之进程管理---多处理器调度

    引言 之前我们所学习的操作系统进程调度策略的前提条件是单处理器系统下的CPU调度程序.如果系统中存在多个CPU,那么负载分配就成为可能,但是相应的调度问题就会更加复杂. 多处理器调度方法 对于多处理器 ...

  9. OS之进程管理---孤儿进程和僵尸进程

    僵尸进程 当一个进程终止时,操作系统会释放其资源,不过它位于进程表中的条目还是在的,直到它的父进程调用wait():这是因为进程表中包含了进程的退出状态.当进程已经终止,但是其父进尚未调用wait() ...

  10. (转)Linux 文件目录特殊权限设定(SUID,SGID,SBIT)

    原文:https://blog.csdn.net/leshami/article/details/77184029 Linux文件及目录的权限设定,除了我们孰知的读写执行(rwx)之外,还有一些特殊的 ...