System.Text.Json中时间格式化

转自:Rayom

cnblogs.com/Rayom/p/13967415.html

简介

.Net Core 3.0开始全新推出了一个名为System.Text.Json的Json解析库,用于序列化和反序列化Json,此库的设计是为了取代Json.Net(Newtonsoft.Json)

时间格式化的不足

System.Text.Json的优点就不说了,来说一下不完善的地方,毕竟一个新事物出来,不可能十全十美的,用的最多的就是时间的格式化

官方文档:在 System.Text.Json 中,具有内置支持的唯一格式是 ISO 8601-1:2019,因为它被广泛采用、意义明确并且可精确地进行往返。若要使用任何其他格式,请创建自定义转换器

ISO 8601-1:2019通俗的说就是时间格式化为2020-11-11T21:08:18。ISO 8601-1:2019标准参考:ISO官网 | 百度百科 | wikipedia

但我们一般用的时候不想要这种格式,因为中间有一个T,前端处理起来很麻烦,最好还是返回指定的时间格式,例如:yyyy-MM-dd、yyyy-MM-dd HH:mm:ss。

解决方案

既然官方不内置提供指定时间格式化的方式,那就没办法了吗,查阅文档发现,虽然无法简单的实现功能,但是可以通过创建自定义转换器来实现相应功能

文档地址:https://docs.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json-migrate-from-newtonsoft-how-to#specify-date-format

以下是一个自定义时间转化器的完整实现:

public class DateTimeConverterUsingDateTimeParse : JsonConverter<DateTime>
{public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options){return DateTime.Parse(reader.GetString());}public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options){writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss"));}
}

使用

代码看起来非常简单是不是,只需要重写Read和Write,但是我们只是写了一个自定义转换器,怎么让它生效呢,请往下看:

JsonSerializer.Serialize()和JsonSerializer.Deserialize()方法都接受一个JsonSerializerOptions类型的配置项参数

在JsonSerializerOptions添加Converters就可以了

JsonSerializerOptions options = new JsonSerializerOptions()
{Converters.Add(new DateTimeConverterUsingDateTimeParse())
}
string jsonString = JsonSerializer.Serialize(data, options);

至此,我们已经实现使用System.Text.Json库指定时间格式字符串进行序列化和反序列化,你甚至可以把yyyy-MM-dd HH:mm:ss做成参数来更自由的指定格式化字符串

基准测试

但是凡事有利就有弊,官方文档也说得很清楚了:

使用自定义转换器与使用序列化程序的本机实现相比,此方法的性能大大降低

有人就想知道了,到底会影响多少性能呢,我进行了一项基准测试,序列化100000条数据,包含时间处理,模型如下:

public class Dto
{public string Name { get; set; }public string Phone { get; set; }public DateTime DateTime { get; set; }
}
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
Intel Core i7-6700K CPU 4.00GHz (Skylake), 1 CPU, 8 logical and 4 physical cores
.NET Core SDK=5.0.100-rc.2.20479.15[Host]     : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT  [AttachedDebugger]DefaultJob : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT

System.Text.Json Version 5.0.0

Newtonsoft.Json Version 12.0.3

结语

可以看到性能确实会有影响,但是可以忽略不计了,100000条才差10ms。

同时可以发现System.Text.Json性能是Newtonsoft.Json的两倍

推荐大家以后在满足需求的情况下尽量使用内置的System.Text.Json

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows server 启用 vss_windows服务器常用的安全加固方法

Windows操作系统本身已经提供了多种安全机制&#xff0c;如标识与鉴别、访问控制、用户账户控制、安全审计、文件系统。但是&#xff0c;这并不意味着操作系统就固若金汤。事实上&#xff0c;任何一个Windows版本都或多或少的存在着漏洞&#xff0c;而且在不断的被挖掘出来。Wi…

说说 C# 9 新特性的实际运用

前言你一定会好奇&#xff1a;“老周&#xff0c;你去哪开飞机了&#xff1f;这么久没写博客了。”老周&#xff1a;“我买不起飞机&#xff0c;开了个铁矿&#xff0c;挖了一年半的石头。谁知铁矿垮了&#xff0c;压死了几条蜈蚣&#xff0c;什么也没挖着。”所以&#xff0c;…

thinkpad笔记本散热风扇_十代酷睿笔记本低至2999元 你可以入手了_笔记本新闻

这年头3000元能干什么&#xff1f;买一套化妆品还是一套乐高积木&#xff1f;现在很严肃地告诉你&#xff0c;可以买一台笔记本&#xff0c;而且是搭载英特尔第十代酷睿处理器的轻薄笔记本——联想ThinkPad 翼14 Slim。联想ThinkPad 翼14 Slim轻薄笔记本其搭载了英特尔十代酷睿…

matlab对数据插值增加数据,matlab数据插值与拟合方法

晚上做一个曲线拟合&#xff0c;结果才开始用最小二乘法拟合时&#xff0c;拟合出来的东西太难看了&#xff01;于是尝试用其他方法。经过一番按图索骥&#xff0c;终于发现做曲线拟合的话&#xff0c;采用插值法是比较理想的方法。尤其是样条插值&#xff0c;插完后线条十分光…

BenchmarkDotNet v0.12x新增功能

起因在看.Net 官方博客 .Net 5性能优化 中,发现测试性能的BenchmarkDotNet版本已经是v0.12.1,然后去看BenchmarkDotNet文档,发现还是有不少新的特性.v0.12.0支持多个运行时(API改进),增加对.Net 5支持支持DotNet创建BenchmarkDotNet项目(项目模版)增加NativeMemoryProfiler(目前…

邮箱通知php,PHPMailer 发送邮件(含详细介绍及使用方法说明)

上篇文章PHP mail()方法发送邮件部分邮箱无法收到邮件问题提到要介绍一下phpmailer这款免费开源的php 邮件程序&#xff0c;下面我们来看看吧&#xff0c;以下资料全部来自phpmailer官方网站&#xff1a;PHPMailer 也是一个功能强大的邮件类PHPMailer的主要功能特点&#xff1a…

centos amd双显卡_PCIe4.0和PCIe3.0对显卡性能差别大吗?

众所周知&#xff0c;AMD X570、B550主板&#xff0c;包括RX3000系列显卡&#xff0c;率先支持了PCIe 4.0协议&#xff0c;高达32GB/s带宽&#xff0c;相比现在的PCIe3.0带宽足足翻了一倍&#xff0c;也是AMD新平台一大卖点&#xff0c;然而intel却无动于衷&#xff0c;并各种表…

我画着图,FluentAPI 她自己就生成了

在 Newbe.ObjectVistor 0.3 版本中我们非常兴奋的引入了一个紧张刺激的新特性&#xff1a;使用状态图来生成任意给定的 FluentAPI 设计。开篇摘要 在非常多优秀的框架中都存在一部分 FluentAPI 的设计。这种 API 设计更加符合人类自言语言描述。使得代码更加具备可读性。在 New…

python的基础知识可以应用到哪方面-Python基础知识

python基础 python的诞生 2002年&#xff0c;python 2.x 2008年&#xff0c;python 3.x python的命名 马戏团的名称 python简介 简单、易学 持快速开发. 跨平台. 开源. 可扩展. 可嵌入. 大量的标准库和活跃的交流群. 可用于各种各样的开发. 应用领域 系统编程 提供API&#xff…

java爬虫基础知识,Java网络爬虫基础知识

引言Java 网络爬虫具备很好的扩展性可伸缩性&#xff0c;其是目前搜索引擎开发的重要组成部分。例如&#xff0c;著名的网络爬虫工具 Nutch 便是采使用 Java 开发&#xff0c;该工具以 Apache Hadoop 数据结构为依托&#xff0c;提供了良好的批解决支持。Java 网络爬虫涉及到 J…

.NET5都来了,你还不知道怎么部署到linux?最全部署方案,总有一款适合你

随着2020进入4季度&#xff0c;.NET5正式版也已经与大家见面了。不过&#xff0c;尽管 .NET Core发布已经有四五年的时间&#xff0c;但到目前为止&#xff0c;依旧有很多.NET开发者在坚守者.NET4&#xff0c;原因不尽相同&#xff0c;但最大的问题可能还是不熟悉Linux&#xf…

好用的平板电脑_平板选择华为M6,这里有几点建议

大家好&#xff0c;我是师兄。平板几乎已经成大学生生活中必备的物品之一了&#xff0c;现在的学生实在是太会享受了。作为华为M6的重度使用用户&#xff0c;在这里给大家在购买华为平板M6时提几点建议。1.质量挺好的&#xff0c;品制有保证购买华为平板M6已经半年了&#xff0…

读取oracle bfile字段,ORACLE中BFILE字段的使用研究_oracle

因为做项目&#xff0c;需要使用BFILE字段存储图像文件&#xff0c;所以进行了一些研究。bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复bfile的基本操作如下&#xff1a;1.先在oracle数据库中下面我…

客户的一个紧急bug,我用了两种方式进行 C# 反编译修改源码

一&#xff1a;背景 1. 讲故事周五下午运营反馈了一个紧急bug&#xff0c;说客户那边一个信息列表打不开&#xff0c;急需解决&#xff0c;附带的日志文件也发过来了&#xff0c;看了下日志大概是这样的&#xff1a;日期:2020-11-13 12:25:45,923 线程ID:[3924] 日志级别:INFO …

离线语音识别软件_从音乐识别软件起家,这家公司如何备战车载AI语音市场GGAI对话...

加入高工智能汽车专业行业群(自动驾驶5群&#xff0c;车联网智能座舱3群&#xff0c;智能网联商用车2群)&#xff0c;加微信&#xff1a;17157613659&#xff0c;出示名片&#xff0c;仅限智能网联汽车软硬件供应商及OEM厂商。早在2016年&#xff0c;亚马逊推出的语音助手Alexa…

int函数在Oracle,vb中int是什么意思 ?

VB语言中int函数的意思是取整数。即&#xff1a;int(x)函数是取不大于x的最大整数。例如&#xff1a;1、int(4.88)4int(4.88)即是取一个不大于4.88且最接近4.88的整数&#xff0c;所以int(4.88)4。2、int(8.1)8int(8.1)即是取一个不大于8.1且最接近8的整数&#xff0c;所以int(…

.NET 5 中的隐藏特性

转自&#xff1a;hez2010cnblogs.com/hez2010/p/13963803.html前言双十一当天&#xff0c;个人觉得非常香&#xff0c;并且花了 10 分钟时间就把自己的 4 个 .NET Core 3.1 的项目升级到了 .NET 5&#xff0c;堪称无痛。但是&#xff0c;.NET 5 中还有一些没有正式公开的隐藏特…

windows如何添加本机dns记录_运维必看!超清晰的 DNS 原理入门指南

来源&#xff1a;阮一峰的网络日志作者&#xff1a;阮一峰链接&#xff1a;http://www.ruanyifeng.com/blog/2016/06/dns.htmlDNS 是互联网核心协议之一。不管是上网浏览&#xff0c;还是编程开发&#xff0c;都需要了解一点它的知识。本文详细介绍DNS的原理&#xff0c;以及如…

linux oracle流复制,oracle 流复制

测试环境:oracle linux 虚拟机192.168.1.4,192.168.1.5oracle 10.2.0.3alter system set global_namestrue scopeboth;show parameter COMPATIBLEshow parameter jobalter system set streams_pool_size15 scopememory;[more]归档日志模式GRANT DBA TO strmadmin IDENTIFIED BY…

天际数见数据质量巡检架构优化

源宝导读&#xff1a;天际数见平台是一个数据可视化的BI平台&#xff0c;定位于为高层决策提供数据可视化赋能。数据准确性是生命线&#xff0c;如何提前发现数据问题&#xff0c;快速定位和修复问题&#xff0c;成为我们必须攻克的难点。本文将介绍数见平台通过架构优化&#…