【发布时间】:2018-12-16 18:43:42
【问题描述】:
我正在开发一个简单的 Web API 客户端。我的模型中有一个ExpiresOn 属性,我已将其指定为DateTimeOffset。
public class Model {
public DateTimeOffset ExpiresOn { get; set; }
}
我使用 JsonConvert.DeserializeObject<T>() 从 JSON 字符串反序列化 API 响应。我注意到,由于我检索的 JSON 没有指定任何时区信息,因此 JSON.Net 将假定它是本地时间,并根据我的设置返回一个调整为 UTC 的DateTimeOffset。我尝试了不同的组合,但我似乎无法“强制”JsonConvert 像读取 UTC 一样读取字符串。
最好有一个使用JsonConvert.DefaultSettings 全局设置该设置的选项,因为我在多个位置进行了类似的解析。
另外,我正在为 ASP.Net Core 2.1 编码,并且我的主机的 tz 设置为 CEST (+02:00)。在主机上设置不同的时区不是一种选择。
附录:
要解析的string 示例是"2018-07-09T11:22:33.45678"。我尝试了DateParseHandling 和DateTimeZoneHandling 的排列,但都返回一个日期:2018-07-09T11:22:33.45768+02:00。
显然,反序列化器假定字符串是本地时间的。因此,有没有办法让它像AssumeUniversal 那样对待DateTimeOffset.TryParse?
【问题讨论】:
-
Can you tell JSON.Net to serialize DateTime as Utc even if unspecified? 的可能重复项。这当然只有在你所有的日期都是 UTC 时才有效。
-
序列化不是问题。它正在反序列化。
-
那么,您是否尝试过这些反序列化设置?它们也适用于反序列化。此外,提供一些您想要反序列化的日期字符串也会有所帮助。
-
我编辑了问题以反映我的问题。
-
有趣的是,它确实对 DateTimeOffset 没有任何作用(请参阅我的回答)。不管你想解决这个问题,你可能不会使用
JsonConverter
标签: c# json.net datetimeoffset