问题描述
我注意到,当值为零时,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
哪个州:
所以,这意味着:
- JSON.NET和System.Text.Json违反了规范,因为我们发送的是不同的“格式”?或
- 我们遵守该规范,但是所有客户都应该灵活以处理不同格式?
解决方法
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