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组件, 我 ...
随机推荐
- 基于.NET实现Matlab备用方案
基于.NET实现Matlab备用方案 今日圈内的朋友都在刷这样的消息: 正值哈工大百年校庆之际,哈工大.哈工程的师生收到了MATLAB软件停止服务的邮件,在与 MATLAB 开发公司 MathWork ...
- CSS文本,字体设置与元素边框,阴影,显示模式
什么是元素的显示模式 网页中的标签很多,在不同的地方使用不同类型的标签. 元素显示模式就是标签以什么方式进行显示.如:div自己占一行,span一行可以放多个. HTML元素一般分为块元素和行内元素两 ...
- 应用--WebApplication
应用--Program中的WebApplication 在6.0,微软团队对于NetCore做了很大的改变,其中有一个改变就是推出了新的托管模型--最小托管模型,使用该模型可以创建最小的web应用.( ...
- setjmp/longjmp使用问题
setjmp/longjmp开启编译优化后导致出现无法正常使用
- .NET Core开发实战(第13课:配置绑定:使用强类型对象承载配置数据)--学习笔记
13 | 配置绑定:使用强类型对象承载配置数据 要点: 1.支持将配置值绑定到已有对象 2.支持将配置值绑定到私有属性上 继续使用上一节代码 首先定义一个类作为接收配置的实例 class Config ...
- 使用VNC在Windows上远程访问Ubuntu服务器
Step 0:事前准备 一台安装了ghome桌面的Ubuntu服务器(用作server) 一台Windows机器(用作client) Step 1:Linux服务器 在Ubuntu上安装一个VNC服务 ...
- BZOJ3364 Distance Queries 距离咨询 题解
原题 简化题意:有一棵 \(n\) 个点的树, \(q\) 组询问,每次询问回答两点间的距离. 令 \(dis[i][j]\) 表示 \(i\) 到 \(j\) 的距离,根节点为 \(rt\) ,则有 ...
- Linux 中hdparm命令使用说明——带实例
详解Linux中hdparm命令查看硬盘信息的用法 功能说明:显示与设定硬盘的参数. 语 法:hdparm [-CfghiIqtTvyYZ][-a ][-A <0或1>][-c ][-d ...
- 【framework】Surface创建流程
1 前言 View添加过程 中介绍了从 WindowManagerImpl 的 addView() 方法到 WindowState.SurfaceSession 的创建流程,本文将介绍 Surface ...
- Spring Boot图书管理系统项目实战-9.归还图书
导航: pre: 8.续借图书 next:10.借还统计 只挑重点的讲,具体的请看项目源码. 1.项目源码 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.页面设计 2.1 bookRetur ...