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 web的时候,碰到了一个对象序列化的问题. 问题重现 public class AjaxJso ...
- js 中读取JSON的方法探讨
方法一:函数构造定义法返回 var strJSON = "{name:'json name'}"; //得到的JSONvar obj = new Function("r ...
- javascript中的JSON序列化与反序列化
简单粗暴上代码: function create() { this.name = "jack"; this.sex = "man"; } create.prot ...
- iOS中解析json多种方法
我感觉JSON解析,重要的是JSON解析之后对结果的处理JSON解析后是个dictionary,但是字典中有可能包含字典和数组,数组中还可以包含字典.向客户端请求的返回数据解析下面就简单介绍一下JSO ...
- C++中使用Json的方法
使用 C++ 处理 JSON 数据交换格式 一.摘要 JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON官 ...
- C#中的Json序列化
核心思想: 利用nuget下载“Newtonsoft.Json”包,调用其中的方法可以json化各种对象.反序列化调用“JsonConvert.DeserializeObject<DataTab ...
- 自已写的Json序列化方法,可以序列话对象的只读属性
/* * by zhangguozhan 2015/1/5 * P2B.Common.CJson.ConvertJson.ObjectToJson<SenderDomainModel>方法 ...
- C#中Newtonsoft.Json 序列化和反序列化 时间格式
步骤 引用 using Newtonsoft.Json; using Newtonsoft.Json.Converters; 格式配置 IsoDateTimeConverter timeFormat ...
- C#中的Json的序列化和反序列化
Json是一种通用的数据格式,我们在数据交换的时候,经常会用到,下面介绍c#中的json序列化和反序列化,当然也可用在asp.net,silverlight,wpf中.我们在下面实例讲解如何进行Jso ...
- 解决nodejs中json序列化时Date类型默认为UTC格式
在nodejs中,json序列化时Date类型时,默认转为UTC格式. 如下图 上面只是一个例子,下面我用一个更具体化的例子来展示一个这个情况,我们在开发WEB项目中,经常用到Express组件, 我 ...
随机推荐
- C/C++ 操作注册表与服务
枚举注册表启动项: 通过添加注册表启动项,可以很方便地完成自启动,常用的启动位置有CurrentVersion,BootExecute,Active Setup. #include <stdio ...
- Spring声明式事务控制配置
xml配置(配置文件) <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...
- 5、后端学习规划:.Net学习 - 学习规划系列文章
.Net是微软发布的一整套的软件编程解决方案.笔者从大学的时代开始就阅读.netframework的书籍了,但是当时没有进行实践.毕业后,笔者去了微软技术中心的公司上班,所以就接触了.net以及C#编 ...
- Python初学(请大神多多指教)
python的注释单行注释用#号多行注释用''' '''注释 基本数据类型 字符串-- n1 = "alex" n2 = 'root' n3 = " ...
- DNS转发器·
实验介绍:dns转发器的作用 当客户端向dns1询问域名对应IP时,如果dns1不是该区域的授权域名服务器,则无法解析域名 dns1会根据转发器转发给dns3,如果dns3能解析,则返回给dns1. ...
- 《AI驱动下的开发者新生态》-2024长沙.NET技术社区活动-诚邀大家报名
回顾 2019年初,在.NET中文社区及包括苏州.广州.深圳等地区社区等大力推动.在众多企业的大力支持下,长沙地区的开发者们发起成立了长沙.NET技术社区,并组织了<2019年长沙开发者技术大会 ...
- Libata Error Message 解析
Libata error messages Contents [hide] 1 Overview 2 Prefix 3 Exception line 4 Input taskfile 5 O ...
- NVME学习笔记杂谈—名词定义
1.5 定义1.5.1 Admin QueueAdmin Queue 是标识符为 0 的 Submission Queue 和 Completion Queue .Admin Submission Q ...
- Spring Boot图书管理系统项目实战-9.归还图书
导航: pre: 8.续借图书 next:10.借还统计 只挑重点的讲,具体的请看项目源码. 1.项目源码 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.页面设计 2.1 bookRetur ...
- pikachu sql inject 时间盲注
输入框输入任何消息返回内容都是一样的 那么可以考虑插入sleep函数来观察响应时长来判断是否有注入点 输入 kobe' and sleep(3) # 发现页面缓冲3秒才响应,说明确实是注入点 通过if ...