利用扩展方法重写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. 依赖包 说明 < ...
 
随机推荐
- Redis入门教程(C#)
			
Redis是什么? Redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库. 补充概念: 持久化:是将程序数据在持久状态和瞬时状态间转换的机制.通俗的 ...
 - SQL语句中的TOP(expression) [PERCENT] [WITH TIES] 用法
			
TOP(expression) [PERCENT] [WITH TIES] expression : 指定返回行数的数值表达式.如果指定了PERCENT,则expression默认转换为FLOAT值, ...
 - kubernetes1.9管中窥豹-CRD概念、使用场景及实例
			
欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言 默认读者有kubernetes基础概念的背景知识,因此基础概念例如有状态.pod.Replica Sets.Deployments.state ...
 - 667. Beautiful Arrangement II
			
Given two integers n and k, you need to construct a list which contains n different positive integer ...
 - oi之詩
			
§3我看到你所说的那位OIer了. §2OIERNAME? §3是的.小心.他已达到了更高的境界.他能阅读我们的思想. §2没关系.他认为我们是代码的一部分. §3我喜欢这个OIer.他做得很好.他从 ...
 - [As3.0] 获取本机信息
			
package { import flash.display.Sprite; import flash.events.Event; import flash.net.NetworkInfo; impo ...
 - zookeeper集群环境搭建详细图文教程
			
zookeeper集群环境搭建详细图文教程 zhoubang @ 2018-01-02 [文档大纲] 友情介绍 软件环境 注意点 环境安装 1. 新建用于存储安装包以及软件安装的目录 2. 下载安装z ...
 - HTML+Javascript制作拼图小游戏详解(终)
			
上次我们已经讲解了制作的原理,并且展示了主要代码. 这次我将完整的代码给大家,仅供参考. HTML部分如下: <!DOCTYPE html> <html lang="en& ...
 - System Trace in Depth
			
原理 使用 system trace 时,会记录最近 5s 的 kernel trace,然后分析下面的操作: Scheduling activity System calls Virtual mem ...
 - WebDriverAPI(9)
			
操作JavaScript的Alert窗口 测试网址代码 <html> <head> <title>你喜欢的水果</title> </head> ...