我刚刚升级到 OData 库的 RTM 版本。我注意到 DateTime 处理中似乎存在不一致之处,并且想知道是否有人可以解释我可能遗漏的内容,或者实际上是否存在一些问题。除了 RTM 库之外,我还依赖于 2012 年 3 月 30 日版本的 MS-ODATA。
MS-ODATA 以以下格式定义 dateTimeUriLiteral(例如简化):
YYYY-MM-DDTHH:MM:SS.NS 其中 NS 定义为 nanoSeconds=1*7DIGIT
MS-ODATA 将 VJsonDateTime 定义为可怕的 /Date(...)/ 格式。
然而,在详细的 JSON 序列化中使用库,我们会看到 dateTimeUriLiteral 格式,而不是 VJsonDateTime。此外,反序列化仅接受 dateTimeUriLiteral 格式。这看起来像是规范和实现之间的冲突。
此外,dateTimeUriLiteral 不考虑时区偏移(例如 ISO 8601 格式的情况)。但是,我们看到当序列化的日期时间对象被指定为 DateTimeKind.Utc 时,库会发出一个“Z”终止字符(UTC 的 ISO 8601)。这看起来也像是规范和实现之间的冲突。
此外,当我们使用库反序列化具有终止“Z”的 dateTimeUriLiteral 时 - 反序列化的对象被标记为 DateTimeKind.Local。无论是否存在对 UTC 指示符的规范问题 WRT 支持,这看起来都不正确。'Z' 应该导致反序列化失败,或者应该导致时间标记为 UTC(非本地)。