利用扩展方法重写JSON序列化和反序列化
利用.NET 3.5以后的扩展方法重写JSON序列化和反序列化,在代码可读性和可维护性上更加加强了。
首先是不使用扩展方法的写法
定义部分:
- /// <summary>
- /// JSON序列化反序列化工具
- /// </summary>
- public class JSONControl
- {
- /// <summary>
- /// JSON序列化
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="_Object"></param>
- /// <returns></returns>
- public static String JsonSerializer<T>(T _Object)
- {
- using (MemoryStream TempMemoryStream = new MemoryStream())
- {
- String MySerializationString = String.Empty;
- DataContractJsonSerializer MyDataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
- MyDataContractJsonSerializer.WriteObject(TempMemoryStream, _Object);
- MySerializationString = Encoding.UTF8.GetString(TempMemoryStream.ToArray());
- return MySerializationString;
- }
- }
- /// <summary>
- /// 反序列化
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="_JsonString"></param>
- /// <returns></returns>
- public static T JsonDeserializer<T>(String _JsonString)
- {
- using (MemoryStream TempMemoryStream = new MemoryStream(Encoding.UTF8.GetBytes(_JsonString)))
- {
- DataContractJsonSerializer MyDataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
- return (T)MyDataContractJsonSerializer.ReadObject(TempMemoryStream);
- }
- }
- }
使用部分:
- /// <summary>
- /// 场景控制对象
- /// </summary>
- public class SceneControl
- {
- /// <summary>
- /// 临时序列化对象
- /// </summary>
- [DataContract]
- public class TempClass
- {
- /// <summary>
- /// 属性1
- /// </summary>
- [DataMember(Name = "Property1")]
- public String Property1 { get; set; }
- /// <summary>
- /// 属性2
- /// </summary>
- [DataMember(Name = "Property2")]
- public String Property2 { get; set; }
- }
- /// <summary>
- /// 测试
- /// </summary>
- public void Test()
- {
- String JsonString = "{'Property1':'111','Property2':'2'}";
- TempClass MyTempClass = JSONControl.JsonDeserializer<TempClass>(JsonString);
- }
- }
然后是使用扩展方法的写法
定义部分:
- /// <summary>
- /// JSON序列化反序列化工具
- /// </summary>
- public static class JSONControl
- {
- /// <summary>
- /// JSON序列化
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="_Object"></param>
- /// <returns></returns>
- public static String ObjectToJson<T>(this T _Object)
- {
- using (MemoryStream TempMemoryStream = new MemoryStream())
- {
- String MySerializationString = String.Empty;
- DataContractJsonSerializer MyDataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
- MyDataContractJsonSerializer.WriteObject(TempMemoryStream, _Object);
- MySerializationString = Encoding.UTF8.GetString(TempMemoryStream.ToArray());
- return MySerializationString;
- }
- }
- /// <summary>
- /// JSON反序列化
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="_JsonString"></param>
- /// <returns></returns>
- public static T JsonToObject<T>(this String _JsonString)
- {
- using (MemoryStream TempMemoryStream = new MemoryStream(Encoding.UTF8.GetBytes(_JsonString)))
- {
- DataContractJsonSerializer MyDataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
- return (T)MyDataContractJsonSerializer.ReadObject(TempMemoryStream);
- }
- }
- }
使用部分:
- /// <summary>
- /// 场景控制对象
- /// </summary>
- public class SceneControl
- {
- /// <summary>
- /// 临时序列化对象
- /// </summary>
- [DataContract]
- public class TempClass
- {
- /// <summary>
- /// 属性1
- /// </summary>
- [DataMember(Name = "Property1")]
- public String Property1 { get; set; }
- /// <summary>
- /// 属性2
- /// </summary>
- [DataMember(Name = "Property2")]
- public String Property2 { get; set; }
- }
- /// <summary>
- /// 测试
- /// </summary>
- public void Test()
- {
- String JsonString = "{'Property1':'111','Property2':'2'}";
- TempClass MyTempClass = JsonString.JsonToObject<TempClass>();
- }
- }
原文地址:http://zhangrou.net/post/2014/06/23/利用扩展方法重写JSON序列化和反序列化.aspx
利用扩展方法重写JSON序列化和反序列化的更多相关文章
- Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解
Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全 Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...
- 在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出MethodArgumentNotValidException异常,因此,只需要在ExceptionHandler类中添加处理对应异常的方法即可。
在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出Method ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变
在net中json序列化与反序列化 准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...
- Newtonsoft.Json 序列化和反序列化 时间格式
From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...
- Newtonsoft.Json 序列化和反序列化 时间格式 [转]
1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain ...
- [转]Newtonsoft.Json 序列化和反序列化 时间格式
本文转自:http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeObj ...
- Newtonsoft.Json 序列化和反序列化 以及时间格式
1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain ...
- Scala中使用 Jackson API 进行JSON序列化和反序列化
1. 什么是 Json 序列化 和 反序列化 序列化 => 将 Java对象 转换成 json字符串反序列化 => 将 json字符串 转换成 Java对象 2. 依赖包 说明 < ...
随机推荐
- Django分页设置
1. """ 分页组件使用示例: obj = Pagination(request.GET.get('page',1),len(USER_LIST),request.pa ...
- Neutron 架构图
与 OpenStack 其他服务一样,Neutron 采用的是分布式架构,包括 Neutorn Server.各种 plugin/agent.database 和 message queue. Neu ...
- (2019)OCP 12c 062考试题库出现大量新题-4
4.Which four are true about creating and running a remote database scheduler jobs? A) A credential i ...
- Android应用安全防护和逆向分析 ——apk反编译
概述 最近一直在学习Android应用安全相关和逆向分析的知识.现在移动app在安全方面是越来越重视了,特别是那些巨头企业涉及到钱的应用,那加密程度,简直是丧心病狂,密密麻麻.从这里可以看出,对于应用 ...
- day 68crm(5) 分页器的进一步优化,以及在stark上使用分页器,,以及,整理代码,以及stark组件search查询
前情提要: 本节内容 自定制分页器 保存及查询记录 代码整理, stark组件search 查询 一:自定制分页器 page 1:创建类 Pagination # 自定制分页器 _ _init ...
- C++基础知识 基类指针、虚函数、多态性、纯虚函数、虚析构
一.基类指针.派生类指针 父类指针可以new一个子类对象 二.虚函数 有没有一个解决方法,使我们只定义一个对象指针,就可以调用父类,以及各个子类的同名函数? 有解决方案,这个对象指针必须是一个父类类型 ...
- 【GDKOI2017】小队任务 莫比乌斯反演+杜教筛
题目大意:给你n,求$\sum_{i=1}^{n}\sum_{j=i}^{n}[gcd(i,j)=1](i+1)(j+1)$ 子任务一:暴力 子任务二:$T=50000,n≤10^7$ 子任务三:$T ...
- uiautomatorviewer 双击闪退问题解决
最近在学习app自动测试,结果在打开uiautomatorviewer查看app界面元素时,就出现了闪退的问题,找了很多很多方法,最后终于可以解决了,详情请继续往下看 首次安装adt的步骤 将下载的压 ...
- sql子查询在insert、update、delete中的应用
子查询可以应用在INSERT.UPDATE以及DELETE等语句中,合理的使用子查询将能够简化功能的实现并且极大的提高SQL语句执行的效率 用到的表: CREATE TABLE `t_readerfa ...
- Error: java.lang.NullPointerException at outputformat.MysqlOutputFormat.getRecordWriter(MysqlOutputFormat.java:27)
Error: java.lang.NullPointerException at outputformat.MysqlOutputFormat.getRecordWriter(MysqlOutputF ...