2012-04-11 20 views
2

ODataライブラリのRTMバージョンにアップグレードしました。私はDateTime処理の矛盾しているものに気付きました。誰かが私が何が欠けているのかを説明できるかどうか、あるいは実際にいくつかの問題があるかどうかを知りたいと思います。 RTMライブラリに加えて、私はMS-ODATAの3/30/2012バージョンに頼っています。ODataライブラリRTM DateTime不一致

MS-ODATAは、(例えば、簡体字)次の形式でdateTimeUriLiteralを定義:

YYYY-MM-DDTHH:MM:NSはナノ秒= 1 * 7DIGIT

とMSと定義されるSS.NS -ODATAはVJsonDateTimeを恐ろしい/Date(...)/フォーマットとして定義します。

ただし、ライブラリを冗長JSONシリアライズで使用すると、VJsonDateTimeではなくdateTimeUriLiteral形式が表示されます。さらに、逆シリアル化はdateTimeUriLiteral形式のみを受け入れます。これは、仕様と実装の間に矛盾があるように見えます。

また、dateTimeUriLiteralは、(ISO 8601形式の場合のように)タイムゾーンオフセットを考慮しません。しかし、シリアル化されたdatetimeオブジェクトが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 –

答えて

2

Verbose JSON V3はISO DateTime形式(XMLと同じもの)を使用します。 verbose JSON V2とV1は/Date(...)/の形式を使用します。したがって、あなたが書いて読んでいるペイロードのバージョンに依存します。

dateTimeUriLiteralは、Verbose JSON V3の日付時刻形式と同じではありません。 Verbose JSON V3のものはZを使用しています(これは、XmlConvert.ToString(datetime、XmlDateTimeSerializationMode.RoundtripKind)から取得したのと同じことです)。

"Z"値の読み方。これはバグのようです。製品チームはこれについてさらに詳しく検討しています。考えられる回避策は、V2形式に戻すか、代わりに(この問題がない)DateTimeOffset値を使用することです。

+0

Thanks Vitek。私はV3を使用しています。私はVerbose JSONがISOフォーマット(Z値の有無にかかわらず)を使用しているという現在の仕様では何も見つかりませんでした。 – evoskuil

+0

ウェブ上の仕様はおそらく少し古いです。チームは現在、読みやすいように書き直しを行い、すべての新機能を使いやすい形で取り込むよう取り組んでいます。残念ながら、それには時間がかかります。新しい仕様は、進行中の作業として、https://github.com/OData/v3ProtocolDocumentで定期的に公開されています。お気軽にお読みください。可能であればフィードバックをお送りください:-) –