Datetime OData库RTM日期时间不一致

Datetime OData库RTM日期时间不一致,datetime,odata,Datetime,Odata,我刚刚升级到OData库的RTM版本。我已经注意到DateTime处理中出现的不一致,我想知道是否有人可以解释我可能遗漏了什么,或者是否确实存在一些问题。除了RTM库之外,我还依赖于2012年3月30日版本的MS-ODATA MS-ODATA以以下格式定义dateTimeUriLiteral(例如简化): YYYY-MM-DDTHH:MM:SS.NS,其中NS定义为纳秒=1*7位 MS-ODATA将VJsonDateTime定义为可怕的/Date(…)/格式 但是,在详细JSON序列化中使用库时

我刚刚升级到OData库的RTM版本。我已经注意到DateTime处理中出现的不一致,我想知道是否有人可以解释我可能遗漏了什么,或者是否确实存在一些问题。除了RTM库之外,我还依赖于2012年3月30日版本的MS-ODATA

MS-ODATA以以下格式定义dateTimeUriLiteral(例如简化):

YYYY-MM-DDTHH:MM:SS.NS,其中NS定义为纳秒=1*7位

MS-ODATA将VJsonDateTime定义为可怕的/Date(…)/格式

但是,在详细JSON序列化中使用库时,我们看到的是dateTimeUriLiteral格式,而不是VJsonDateTime。此外,反序列化只接受dateTimeUriLiteral格式。这看起来像是规范和实现之间的冲突

此外,dateTimeUriLiteral不允许时区偏移(如ISO 8601格式中的情况)。但是,我们看到,当序列化的datetime对象被指定为DateTimeKind.UTC时,库会发出一个“Z”终止字符(ISO 8601表示UTC)。这看起来也像是规范和实现之间的冲突


此外,当我们使用库反序列化具有终止“Z”的dateTimeUriLiteral时,反序列化对象被标记为DateTimeKind.Local。无论是否存在UTC指示符的规范问题WRT支持,这看起来都不可能是正确的。“Z”应该导致反序列化失败,或者应该导致标记为UTC(非本地)的时间。

详细JSON V3使用ISO日期时间格式(与XML使用的格式相同)。详细JSON V2和V1使用/Date(…)/格式。因此,这取决于您正在写入和读取的有效负载的版本

dateTimeUriLiteral与详细JSON V3日期时间格式不同。verboseJSONV3中的一个使用Z(与从XmlConvert.ToString(datetime,XmlDateTimeSerializationMode.RoundtripKind)中获得的文字相同)


至于读取“Z”值。这似乎是一个错误。产品团队正在对此进行更详细的调查。可能的解决办法似乎是恢复到V2格式,或者改用DateTimeOffset值(这没有问题)。

谢谢Vitek。我正在使用V3。我在当前规范中没有发现任何声明详细JSON使用ISO格式(带或不带“Z”值)的规范。web上的规范可能有点过时。该团队目前正在重写它们,使其更具可读性,并将所有新特性包含在一个易于使用的表单中。不幸的是,这需要一点时间来完成。新规范作为正在进行的工作定期发布在此处:。请随意阅读,如果可能,请发送反馈:-)嗨,evoskuil-我们在周五发布了一些预发布的信息,我们相信这些信息将有助于解决这个问题-您能否尝试一下,并在博客上提供一些反馈?