在WebAPI 2中严格执行ISO8601日期格式

Oli*_*ver 5 c# serialization datetime json.net asp.net-web-api2

前言

默认情况下,JSON序列化程序通过以下方式支持ISO DateTime标准 IsoDateTimeConverter

通过一些额外的自定义,我们可以强制所有日期时间都是UTC(http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization)

jsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc
Run Code Online (Sandbox Code Playgroud)

这再次按预期工作,1972-09-18T02:29:12.264513Z并且1972-09-18T04:29:12.264513+02:00两者等同于1972-09-18 02:29:12 AM序列化之后.

问题

但遗憾的是,省略时区偏移后缀也成功序列化.所以1972-09-18T04:29:12.264513相当于1972-09-18 04:29:12 AMUTC.

这里的问题是我们假设消费者知道日期格式并且理解(根据我们的文档)日期总是假定为UTC.

问题

如果发出时区偏移后缀,有没有办法强制序列化失败,那么我们不做任何假设?

Sła*_*iek 2

我刚刚查看了 Json.NET 代码,我担心如果省略时区偏移后缀,则不可能(或者至少非常困难,因为需要覆盖JsonTextReader/ JsonTextWriter)失败。所有与解析和序列化各种数据类型相关的代码都是内部的。

以下是魔法发生地点的链接: