基于JSON序列化和反序列化通用的封装

1、最近项目已经上线了,闲暇了几天想将JSON的序列化以及反序列化进行重新的封装一下本人定义为JSONHelp,虽然Microsoft已经做得很好了,但是我想封装一套为自己开发的项目使用,方便后期的扩展以及开发使用

2、什么是JSON?

JSON:JavaScript对象表示法(Javascript Object Notation)。JSON是存储和交换文本信息的语法。类似XML。JSON比XML更小、更快,更易解析,现在开发Web应用程序JSON是必不可少的,Json是轻量级的文本数据交换格,JSON独立于语言,JSON具有自我描述性,更易理解,JSON使用JavaScript语法来描述数据对象,但是JSON仍然独立于语言和平台。JSON解析器和JSON库支持许多不同的编程语言

3、JSON-转换为JavaScript对象

JSON文本格式在语法上与创建JavaScript对象的代码相同。由于这种相似性,无需解析器,JavaScript程序能够使用内建的eval()函数,用JSON数据来生成原生的JavaScript对象

4、类似XML

JSON是纯文JSON具有自我描述的特性,JSON具有层级结构(值中存在值)JSON可通过JavaScript进行解析,JSON数据可使用AJAX进行传输,相比XML的不同之处没有结束标签更短 读写的速度更快,能够使用内建的,JavaScript eval()方法进行解析,使用数组,不使用保留字

5、为什么使用JSON?

对于AJAX应用程序来说,JSON比XML更快更易使用:使用XML读取XML文档使用XML DOM来循环遍历文档 ,读取值并存储在变量中

6、使用JSON

读取JSON字符串,用eval()处理JSON字符串,前端JS界面我们通常使用、JSON.parse()进行将对象或者数组字符串进行序列化进行JSON对象与JSON.stringify()

7、JSON的序列化以及反序列化

JSON的序列化和反序列化 ,我用using Newtonsoft.Json 之中的JsonConvert.SerializeObject() 和using System.Runtime.Serialization.Json;之中的Jil.JSON .Serialize()

当然这2个序列化的方式是相同 的。但是Jil.JSON.Serialize()序列化的效率确实比这个JsonConvert.SerializeObject()高的多了。在大量的数据的序列化的时候明显是可以看的出来的,所以我建议当序列化以及反序列化数据量非常大而且多的

时候强烈建议使用Jil.JSON.Serialize()来进行序列化对象以及反序列化对象等等

9、JSONHelp.cs代码如下:

using Newtonsoft.Json;

using System;

using System.IO;

using System.Runtime.Serialization.Json;

using System.Text;

namespace RapidDevelopmentFramework.Common

{

///<summary>

///JSON辅助类

///</summary>

public static class JSONHelper

{

///<summary>

///JSON 序列化的普通版本

///</summary>

///<typeparam name="T"></typeparam>

///<param name="_Object"></param>

///<returns></returns>

public static String ObjectToJSON<T>(this T_Object) where T:class

{

return JsonConvert.SerializeObject(_Object);

}

///<summary>

///JSON 序列化的标准版本

///</summary>

///<param name="_Object"></param>

///<returns></returns>

public static String ObjectToJSON(this Object  _Object)

{

return JsonConvert.SerializeObject(_Object);

}

///<summary>

///JSON序列化的官方版本

///</summary>
///<typeparam name="T"></typeparam>

///<param name="_Object"></param>

///<returns></returns>

public static String ObjectToJSONOfficial<T>(this T_Object) where T:class

{

using (var TempMemoryStream=new MemoryStream())

{

var MyDataContractJsonSerializer=new DataContractJsonSerializer(typeof(T));

MyDataContractJsonSerializer.WriteObject(TempMemoryStream,_Object);

var MySerializationString=Encoding.UTF8.GetString(TempMemoryStream.ToArray());

return MySerializationString;

}

}

///<summary>

///JSON 序列化的Jill版本

///</summary>

///<typeparam name="T"></typeparam>

///<param name="_Object"></param>

///<returns></returns>

public static String ObjectToJSONJil<T>(this T_Object)where T:class

{

return Jil.JSON.Serialize(_Object,Jil.Options.ExcludeNullsIncludeInherited);

}

///<summary>

///JSON序列化的Jil版本,可以包含null

///</summary>

///<typeparam name="T"></typeparam>

///<param name="_Object"></param>

///<returns></returns>

public static String ObjectToJSONJilIncludeNulls<T>(this T_Object)where T:class

{

return Jil.JSON.Serialize(_Object,Jil.Options.IncludeInherited);

}

///<summary>

///JSON 的反序列化

///</summary>

///<typeparam name="T"></typeparam>

///<param name="_JSONString"></param>

///<returns></returns>

public static T JSONToObjectJSON<T>(this String _JSONString) where T:class

{

return JsonConvert.DeserializeObject<T>(_JSONString);

}

///<summary>

///JSON的反序列化的官方版本

///</summary>

///<typeparam name="T"></typeparam>

///<param name="_JSONString"></param>

///<returns></returns>

public static T JSONToObjectOfficial<T>(this String _JSONString) where T :class

{

using (var TempMemoryStream=new MemoryStream(Encoding.UTF8.GetBytes(_JSONString)))

{

var MyDataContractJsonSerializer=new DataContractJsonSerializer(typeof(T));

return (T)MyDataContractJsonSerializer.ReadObject(TempMemoryStream);

}

}

///<summary>

///JSON 的反序列化的官方版本

///</summary>

///<typeparam name="T"></typeparam>

///<param name="_JSONString"></param>

///<returns></returns>

public static T JSONToObjectJil<T>(thjs String _JSONString)where T:class

{

using(var InputString=new StringReader(_JSONString))

{

var ObjectResult=Jil.JSON.Deserialize<T>(InputString);

return ObjectResult;

}}

///<summary>

///JSON 的反序列的Jil版本,其中可以包含null

///</summary>

///<typeparam name="T"></typeparam>

///<param name="_JSONString"></param>

///<returns></returns>

public static T JSONToObjectJilIncludeNulls<T>(this String _JSONString) where T:class

{

using (var InputString=new StringReader(_JSONString))

{

var ObjectResult=Jil.JSON.Deserialize<T>(InputString,Jil.Options.IncludeInherited);

return ObjectResult;

}

}

}

}

原文地址:https://www.cnblogs.com/zzp0320/p/7150160.html