【发布时间】:2020-01-25 20:52:52
【问题描述】:
我正在将 Web API 从 .NET Core 2.2 迁移到 3.0,并希望使用新的 System.Text.Json。使用Newtonsoft 时,我可以使用下面的代码格式化DateTime。我怎样才能做到这一点?
.AddJsonOptions(options =>
{
options.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
options.SerializerSettings.DateFormatString = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZ";
});
【问题讨论】:
-
真正的问题是什么?即使不是,如何将 DateTime 视为 UTC? JSON.NET 和 System.Text.Json 默认使用 ISO8601。如果 DateTimeKind 是 UTC,则将
Z附加到字符串中。本地时间将包括本地时区偏移 -
这不是您的代码所做的,因为 JSON.NET 已经使用 ISO8601 - 您使用的格式相同。你在那里所做的是强制它对所有DateTime kinds 使用UTC。我已经解释过 System.Text.Json 已经 处理 DateTime.Kind 是 UTC 的日期。这意味着您要存储的日期是本地的或未指定的。
-
你为什么要转换为 UTC?为什么不让 System.Text.Json 发出偏移量?在任何情况下,日期格式都在DateTime and DateTimeOffset support in System.Text.Json 中进行了说明。除了创建自定义格式化程序之外,没有办法强制格式化。您可以确保您使用的所有日期都是 UTC 或使用 DateTimeOffset 来确保指定偏移量
-
我想序列化没有小数秒的 DateTime,并且总是 UTC。使用 swift(iOS 应用)访问我的 API 时,小数秒和偏移量会导致 json 解析失败。
标签: c# json datetime asp.net-core system.text.json