2012-04-11 30 views
2

我刚升级到OData库的RTM版本。我注意到了DateTime处理中出现的不一致之处,并想知道是否有人可以解释我可能会丢失的内容,或者实际上是否存在某些问题。除了RTM库之外,我还依靠MS-ODATA的3/30/2012版本。OData库RTM日期时间不一致性

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

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

和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(不是本地)的时间。

+0

嗨,evoskuil - 我们在周五发布了一些预发布位,我们认为这将有助于解决这个问题 - 您是否可以尝试并在博客文章中提供一些反馈? http://blogs.msdn.com/b/astoriateam/archive/2012/04/20/wcf-data-services-5-1-0-rc-prerelease.aspx – 2012-04-23 18:35:20

回答

2

详细JSON V3使用ISO DateTime格式(与XML使用相同的格式)。详细的JSON V2和V1使用/Date(...)/格式。所以它取决于您正在编写和阅读哪个版本的有效载荷。

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

至于读取“Z”值。这似乎是一个错误。产品团队正在更详细地研究这一点。可能的解决方法似乎是恢复为V2格式,或者使用DateTimeOffset值(不存在此问题)。

+0

感谢Vitek。我正在使用V3。在目前的规范中,我没有发现任何指出详细JSON使用ISO格式(带或不带'Z'值)的内容。 – evoskuil 2012-04-12 16:51:14

+0

网络上的规格可能有点陈旧。该团队目前正致力于将其重写为更易读,并将所有新功能都包含在易于使用的表单中。不幸的是,这需要一点时间才能完成。新规格定期发布,正在进行中:https://github.com/Data/v3ProtocolDocument。随意阅读,如果可能的话发送反馈:-) – 2012-04-13 08:10:37