C#中的JSON序列化方法
在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序列化方法相关推荐
- Java中的Json序列化,不容忽视的getter
文章目录 前言 一.Java中的Json序列化,不容忽视的getter 二.问题重现 1.核心代码 2.问题分析 2.1常用 JSON序列化库 的序列化原理: 总结 前言 提示:这里可以添加本文要记录 ...
- java中json重复数据结构_JS实现去除数组中重复json的方法示例
本文实例讲述了JS实现去除数组中重复json的方法.分享给大家供大家参考,具体如下: var array = [{"name":"123"},{"na ...
- python3 中的Json序列化、反序列化 和 字符编码的问题解决
python3 中的Json序列化.反序列化 和 字符编码的问题解决 参考文章: (1)python3 中的Json序列化.反序列化 和 字符编码的问题解决 (2)https://www.cnblog ...
- java get方法不序列化_Java中的Json序列化,不容忽视的getter
在开发的过程中,经常会碰到和自己预期不一样的情况.有的时候自己去研究一下还是很有趣的.这两天在写java web的时候,碰到了一个对象序列化的问题. 问题重现 public class AjaxJso ...
- JavaScript中的JSON序列化/反序列化
JSON 1. JSON简介 2. JSON与JS Object区别 3. 对象序列化 3.1 JSON序列化 3.2 JSON反序列化 1. JSON简介 JSON(JavaScript Objec ...
- JSON中的JSON.parseArray()方法、JSON.parseObject()方法和JSON.tojsonString()方法
1.JSON.JSON.parseObject和JSON.toJSONString JSON.parseObject,是将Json字符串转化为相应的对象:JSON.toJSONString则是将对象转 ...
- JS中的JSON.Stringify 方法详解
在大厂的前端面试过程中,JSON.Stringify常常被问到,那么能够熟练的运用,掌握就必不可少. 那么,到底什么是 JSON.stringify 方法? 方法基本介绍 JSON.stringify ...
- JSON中的JSON.parseArray()方法
JSON方法 JSON.parseObject和JSON.toJSONString JSON.parseArray 三者区别 JSON.parseObject和JSON.toJSONString JS ...
- C++中使用Json的方法
使用 C++ 处理 JSON 数据交换格式 一.摘要 JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON官 ...
最新文章
- 大数据教父Micheal Stonebraker告诉你大数据的秘密
- linux下软件的安装[转]
- H5 video 开发问题及相关知识点
- python解释器、pycharm安装及环境变量配置
- 如何使用Airdrop将视频从Mac发送到iPhone?
- IDEA快捷键+使用小技巧
- LayaAir UI组件 # Tab 选项卡按钮组
- 数据结构-单链表的正向排序
- html 图片整体缩小,CSS实现图片等比例缩小不变形的实例代码
- 寻仙服务器要维护多久,新寻仙正式服5.0.6.1更新公告
- 从吴军的书《见识》总结的49条商业本质、为人方法
- 一个新手RHCE的酸甜苦辣
- 用python代码辅助自己背诵英语四级单词
- SDUTOJ 2777 小P的故事——神奇的换零钱 背包
- 为什么使用非线性激活函数?常见的非线性激活函数及优缺点对比
- 我习于水,志成于冰——谈匠心
- 杰理之检测linein音频输入大小(能量)的方法【篇】
- Spark Submit任务提交流程
- IOS Appstore 预览图尺寸
- 服务器事件查看器根据登录id如何查找信息,Windows中如何查看日志(如查看远程登陆的IP地址)以及常用日志ID...
热门文章
- c语言程序菜鸟教程,菜鸟教程C语言-4
- 解决新版谷歌浏览器不能安装扩展程序的问题
- Shapiro-Wilk检验(一般配合QQ图)
- AD常用快捷键+基础知识(Altium Designer)
- JVS开源框架系列-流程引擎「含开源地址」
- 学习记录报错Consider defining a bean of type ‘org.springframework.web.client.RestTemplate‘ in your configu
- 国民手机良心优品,联想划时代旗舰Z5 Pro来了
- 基于LS1028 TSN时间敏感网络交换机方案(一)TSN介绍
- 公司企业邮箱如何申请?怎样申请企业邮箱账号?
- 鱼叉钓鱼:骗局而非运动