首页 > 编程语言 >C# Json序列化方案选择

C# Json序列化方案选择

时间:2024-01-25 16:57:41浏览次数:23  
标签:Newtonsoft C# Text System Json NET 序列化

在C#中,进行JSON序列化和反序列化有多种方案可供选择,常用的是下面俩个

System.Text.Json:这是.NET Core和.NET 5中内置的JSON序列化和反序列化库,提供了高性能和低内存消耗的JSON处理能力。

Newtonsoft.Json:这是一个流行的第三方JSON处理库,广泛用于Framework中的JSON序列化和反序列化。

我们在使用过程中如何选择方案

.NET Framework

我们建议使用Newtonsoft.Json

System.Text.Json在.NET Framwork,需要通过Nuget安装。

分别序列化一个小对象,按秒表计时对比下输出耗时

 1     System.Text.Json.JsonSerializer.Serialize(new TestMode()
 2     {
 3         ExePath = cAaExe,
 4         Args = args,
 5     });
 6 
 7     JsonConvert.SerializeObject(new TestMode()
 8     {
 9         ExePath = cAaExe,
10         Args = args,
11     });

首次序列化 System.Text.Json:248ms,Newtonsoft.Json:17ms

二次序列化 System.Text.Json:0ms,Newtonsoft.Json:0ms

所以.NET Framework中,我们使用Newtonsoft.Json,另外库的功能性、社区支持度、稳定性都比较好。

.NET

我们建议使用System.Text.Json。库在.NET Core 3.0+ 和 .NET 5+内是自带的。

Newtonsoft.Json在.NET Core和.NET 5+中也可以使用该库,但其性能和内存消耗略高于System.Text.Json

我们对比下延时:

首次序列化 System.Text.Json:31ms,Newtonsoft.Json:128ms

二次序列化 System.Text.Json:0ms,Newtonsoft.Json:0ms

另外,不要安装System.Text.Json的Nuget包,否则首次序列化耗时System.Text.Json:150ms。

 

值得说下,一些简单对象的序列化,不存在后续扩展、变更的场景,可以直接用字符串格式化,性能杠杠的。

标签:Newtonsoft,C#,Text,System,Json,NET,序列化
From: https://www.cnblogs.com/kybs0/p/17987512

相关文章

  • R:PCA(第二版)
    rm(list=ls())library(vegan)library(tidyverse)library(ggalt)library(car)library(ggforce)library(ggpubr)library(patchwork)#2.定义所需的函数。pairwise.adonis1<-function(x,factors,p.adjust.m){#定义了一个名为pairwise.adonis1的函数,该函数......
  • Centos桌面模式和命令行模式切换
    希望在VMware中的CentOS虚拟机默认启动到命令行模式(无桌面模式),而不是图形用户界面(GUI),可以按照以下步骤操作:打开终端,使用以下命令获取当前的默认目标(target),如果是图形模式,通常会显示graphical.target。systemctlget-default将默认目标设置为多用户模式,这是一个无桌面的......
  • 无法加载响应数据:request content was evicted from inspector cache
    这个错误通常是由于请求返回的内容太大而导致的。浏览器的开发者工具(Inspector)有一个缓存限制,如果请求的内容超过了这个限制,就会出现这个错误。解决这个问题的方法有几种:减小请求的内容大小:可以通过压缩请求的内容或者减少不必要的数据来减小请求的大小。增加缓存限制:可以......
  • 《Visual Tree Convolutional Neural Network in Image Classification》阅读笔记
    论文标题《VisualTreeConvolutionalNeuralNetworkinImageClassification》图像分类中的视觉树卷积神经网络作者YuntaoLiu、YongDou、RuochunJin和PengQiao来自国防科技大学并行和分布式处理国家实验室初读摘要问题:在图像分类领域,随着深度学习的快速发展,卷......
  • APISIX同时代理websocket和http请求 websocket无法正常工作
    1.配置了一个路由同时代理websocket和http请求 2.打开了websocket支持,websocket还是无法工作  3.定位3.1通过postman分别走apisix和不经过apisix建立websocet连接,发现经过apisix也能成功建立连接,但是10秒左右就自己断开了。  3.2思考3.3决定试一下是否和超时配置......
  • java aspect 切面怎么获取 POST 数据
    javaaspect切面怎么获取POST数据/***切面*/@Aspect@ComponentpublicclassPostRequestBodyAspect{@Pointcut("execution(*com.example.controller.*.*(..))")publicvoidcontrollerMethods(){}......
  • html 中javascript 如何被调用
    在HTML中,JavaScript可以通过多种方式进行调用。1.内联脚本(InlineScript):直接将JavaScript代码写入到HTML文件的<script>标签中。示例代码如下所示:<!DOCTYPEhtml><html><head><title>使用内联脚本</title></head><body><!--HTML页面内容--><scripttyp......
  • PCB与PCBA的差异?
    在电子制造业中,电路板起着至关重要的作用。电路板(PCB)和电路板组装(PCBA)是电子产品制造过程中的两个关键环节。虽然它们看起来很相似,但实际上它们有着许多的差异。本文将深入探讨PCB与PCBA之间的差异,并详细解释它们各自的特点和作用。首先,让我们来了解一下PCB的概念。它是一个非常重......
  • C++-类和对象(2)默认成员函数
    在上一篇博客中,和大家分享了C++中类和对象的定义,类的大小的计算等知识,那么如果C++中一个自定义类中不定义任何的成员变量和成员函数,那么这个类中就是一个什么都没有的空类了吗?实际上,如果在一个类中,如果类中什么成员都不定义,编译器会自动生成6个默认成员函数。接下来借助一个自定义M......
  • 25从零开始用Rust编写nginx,序列化之serde是如何工作的
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,反向代理,静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/tickbh/wmproxy序......