2

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 シリアル化でライブラリを使用すると、VJsonDateTime ではなく、dateTimeUriLiteral 形式が表示されます。さらに、逆シリアル化は dateTimeUriLiteral 形式のみを受け入れます。これは、仕様と実装の間の競合のように見えます。

また、dateTimeUriLiteral はタイム ゾーン オフセットを考慮しません (ISO 8601 形式の場合など)。ただし、シリアル化された日時オブジェクトが DateTimeKind.Utc として指定されている場合、ライブラリは「Z」終端文字 (UTC の場合は ISO 8601) を発行することがわかります。これも、仕様と実装の間の競合のように見えます。

また、ライブラリを使用して、末尾が「Z」である dateTimeUriLiteral を逆シリアル化すると、逆シリアル化されたオブジェクトは DateTimeKind.Local としてマークされます。UTC 指定子の WRT サポートに仕様上の問題があるかどうかに関係なく、これは正しくないように見えます。「Z」が原因でデシリアライゼーションが失敗するか、UTC (ローカルではない) としてマークされた時刻になる必要があります。

4

1 に答える 1

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 値を使用することです (この問題はありません)。

于 2012-04-12T08:37:19.080 に答える