zoukankan      html  css  js  c++  java
  • 基于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;

    }

    }

    }

    }

  • 相关阅读:
    python requests用法总结
    Linux统计某文件夹下文件的个数
    PM2使用及介绍
    如何区分USB 2.0 和USB 3.0插口
    npm突然找不到npm-cli.js的解决方法
    mRemoteNG
    js中几种实用的跨域方法原理详解
    Tornado异步阻塞解决方案
    [阅读笔记]EfficientDet
    iOS 保存视频AVAssetWriter
  • 原文地址:https://www.cnblogs.com/zzp0320/p/7150160.html
Copyright © 2011-2022 走看看