DateTime序列化器省去了毫秒?

问题描述

我注意到,当值为时,JSON.NET和System.Text.Json都不会序列化日期时间的毫秒数。

如图所示,我看到的值如下:“ 3000-01-01T00:00:00”(无毫秒),“ 3000-01-01T00:00:00.999”

以下是说明问题的小提琴:https://dotnetfiddle.net/yi47EY

问题是,我们的客户中断是因为他们希望格式一致(例如,即使返回.000,总是返回毫秒)

我找到了此引用:https://www.w3.org/TR/NOTE-datetime

哪个州:

采用标准,允许几分之一秒 两个最小位数(大于或等于一个数字) 一个)和最大位数(可以说是 “无限”)。

所以,这意味着:

  1. JSON.NET和System.Text.Json违反了规范,因为我们发送的是不同的“格式”?或
  2. 我们遵守该规范,但是所有客户都应该灵活以处理不同格式?

解决方法

JSON.NET和System.Text.Json违反了规范,因为我们发送的是不同的“格式”?

JSON不是“采用标准”,因为它没有引用ISO 8601,也没有规定日期和时间的任何特定格式。在JSON中,它们只是字符串。因此,序列化器可以随意使用自己喜欢的任何方式表示日期。这两个序列化器都选择 ISO 8601,并且不需要小数秒,并且通常无用的额外字节。

这是JSON非常简单的缺点。

System.Text.Json具有可用于覆盖序列化程序默认行为的自定义转换器:How to write custom converters for JSON serialization (marshalling) in .NET