在C#中的使用JSON序列化及反序列化时,推荐使用Json.NET——NET的流行高性能JSON框架,当然也可以使用.NET自带的 System.Text.Json(.NET5)、DataContractJsonSerializer、JavaScriptSerializer(不推荐)。

下面是Json.NET、DataContractJsonSerializer、JavaScriptSerializer的性能对比(来自Json.NET官网):

Json.NET的扩展方法类如下(需引用Newtonsoft.Json命名空间):

using Newtonsoft.Json;/// <summary>
/// Newtonsoft.Json的扩展方法类
/// </summary>
public static class NewtonsoftJsonExtension
{/// <summary>/// 将Json字符串反序列化为对象实例——Newtonsoft.Json/// </summary>/// <typeparam name="T">对象类型</typeparam>/// <param name="jsonString">Json字符串</param>/// <returns>对象实例</returns>public static T DeserializeObjectFromJson_NJ<T>(this string jsonString){return JsonConvert.DeserializeObject<T>(jsonString);}/// <summary>/// 将对象实例序列化为Json字符串——Newtonsoft.Json/// </summary>/// <typeparam name="T">对象类型</typeparam>/// <param name="obj">对象实例</param>/// <returns>Json字符串</returns>public static string SerializeObjectToJson_NJ<T>(this T obj){return JsonConvert.SerializeObject(obj);}
}

DataContractJsonSerializer的扩展方法类如下(需引用System.Runtime.Serialization.Json命名空间):

using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;/// <summary>
/// System.Runtime.Serialization.Json扩展方法类([DataContract]和[DataMember]联合使用来标记被序列化的字段)
/// </summary>
public static class SerializationJsonExtension
{private static Dictionary<Type, DataContractJsonSerializer> serDic = new Dictionary<Type, DataContractJsonSerializer>();private static DataContractJsonSerializer GetSerializer(Type type){if (!serDic.ContainsKey(type)){serDic.Add(type, new DataContractJsonSerializer(type));}return serDic[type];}/// <summary>/// 将Json字符串反序列化为对象实例——System.Runtime.Serialization.Json([DataContract]和[DataMember]联合使用来标记被序列化的字段)/// </summary>/// <typeparam name="T">对象类型</typeparam>/// <param name="jsonString">Json字符串</param>/// <returns>对象实例</returns>public static T DeserializeObjectFromJson_SJ<T>(this string jsonString){var ser = GetSerializer(typeof(T));using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString))){T jsonObject = (T)ser.ReadObject(ms);return jsonObject;}}/// <summary>/// 将对象实例序列化为Json字符串——System.Runtime.Serialization.Json([DataContract]和[DataMember]联合使用来标记被序列化的字段)/// </summary>/// <typeparam name="T">对象类型</typeparam>/// <param name="obj">对象实例</param>/// <returns>Json字符串</returns>public static string SerializeObjectToJson_SJ<T>(this T obj){var ser = GetSerializer(typeof(T));using (var ms = new MemoryStream()){ser.WriteObject(ms, obj);ms.Position = 0;using (var sr = new StreamReader(ms, Encoding.UTF8)){return sr.ReadToEnd();}}}
}

出处:

C#中的JSON序列化方法相关推荐

  1. Java中的Json序列化,不容忽视的getter

    文章目录 前言 一.Java中的Json序列化,不容忽视的getter 二.问题重现 1.核心代码 2.问题分析 2.1常用 JSON序列化库 的序列化原理: 总结 前言 提示:这里可以添加本文要记录 ...

  2. java中json重复数据结构_JS实现去除数组中重复json的方法示例

    本文实例讲述了JS实现去除数组中重复json的方法.分享给大家供大家参考,具体如下: var array = [{"name":"123"},{"na ...

  3. python3 中的Json序列化、反序列化 和 字符编码的问题解决

    python3 中的Json序列化.反序列化 和 字符编码的问题解决 参考文章: (1)python3 中的Json序列化.反序列化 和 字符编码的问题解决 (2)https://www.cnblog ...

  4. java get方法不序列化_Java中的Json序列化,不容忽视的getter

    在开发的过程中,经常会碰到和自己预期不一样的情况.有的时候自己去研究一下还是很有趣的.这两天在写java web的时候,碰到了一个对象序列化的问题. 问题重现 public class AjaxJso ...

  5. JavaScript中的JSON序列化/反序列化

    JSON 1. JSON简介 2. JSON与JS Object区别 3. 对象序列化 3.1 JSON序列化 3.2 JSON反序列化 1. JSON简介 JSON(JavaScript Objec ...

  6. JSON中的JSON.parseArray()方法、JSON.parseObject()方法和JSON.tojsonString()方法

    1.JSON.JSON.parseObject和JSON.toJSONString JSON.parseObject,是将Json字符串转化为相应的对象:JSON.toJSONString则是将对象转 ...

  7. JS中的JSON.Stringify 方法详解

    在大厂的前端面试过程中,JSON.Stringify常常被问到,那么能够熟练的运用,掌握就必不可少. 那么,到底什么是 JSON.stringify 方法? 方法基本介绍 JSON.stringify ...

  8. JSON中的JSON.parseArray()方法

    JSON方法 JSON.parseObject和JSON.toJSONString JSON.parseArray 三者区别 JSON.parseObject和JSON.toJSONString JS ...

  9. C++中使用Json的方法

    使用 C++ 处理 JSON 数据交换格式 一.摘要 JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON官 ...

最新文章

  1. 大数据教父Micheal Stonebraker告诉你大数据的秘密
  2. linux下软件的安装[转]
  3. H5 video 开发问题及相关知识点
  4. python解释器、pycharm安装及环境变量配置
  5. 如何使用Airdrop将视频从Mac发送到iPhone?
  6. IDEA快捷键+使用小技巧
  7. LayaAir UI组件 # Tab 选项卡按钮组
  8. 数据结构-单链表的正向排序
  9. html 图片整体缩小,CSS实现图片等比例缩小不变形的实例代码
  10. 寻仙服务器要维护多久,新寻仙正式服5.0.6.1更新公告
  11. 从吴军的书《见识》总结的49条商业本质、为人方法
  12. 一个新手RHCE的酸甜苦辣
  13. 用python代码辅助自己背诵英语四级单词
  14. SDUTOJ 2777 小P的故事——神奇的换零钱 背包
  15. 为什么使用非线性激活函数?常见的非线性激活函数及优缺点对比
  16. 我习于水,志成于冰——谈匠心
  17. 杰理之检测linein音频输入大小(能量)的方法【篇】
  18. Spark Submit任务提交流程
  19. IOS Appstore 预览图尺寸
  20. 服务器事件查看器根据登录id如何查找信息,Windows中如何查看日志(如查看远程登陆的IP地址)以及常用日志ID...

热门文章

  1. c语言程序菜鸟教程,菜鸟教程C语言-4
  2. 解决新版谷歌浏览器不能安装扩展程序的问题
  3. Shapiro-Wilk检验(一般配合QQ图)
  4. AD常用快捷键+基础知识(Altium Designer)
  5. JVS开源框架系列-流程引擎「含开源地址」
  6. 学习记录报错Consider defining a bean of type ‘org.springframework.web.client.RestTemplate‘ in your configu
  7. 国民手机良心优品,联想划时代旗舰Z5 Pro来了
  8. 基于LS1028 TSN时间敏感网络交换机方案(一)TSN介绍
  9. 公司企业邮箱如何申请?怎样申请企业邮箱账号?
  10. 鱼叉钓鱼:骗局而非运动