2

RavenRB (ビルド 1.0.960) に保存する C# オブジェクトがあります。DateTime は UNIVERSAL ですが、RavenDB はそれを現地時間として保存します。"Time": "2012-06-12T13:07:39.0000000"

次に、session.Query().Where()... を使用して世界時を渡すと、オブジェクトが返されません... 比較が 12 時間 (Im UTC+1200) ずれているためです。

私は何を間違っていますか??

[編集]

わかりました - 問題が何であるかがわかります。オブジェクト (JSON) をサーバーに POST し、UTC 形式 (タイムゾーン オフセットなし、「2012-06-12T13:07:39.00Z」) で送信します。Asp.net Web API が送信されたのと同じように、UTC Kind のオブジェクトに逆シリアル化しますが、そうではありません。ローカルサーバー時間にデシリアライズされます。これは、オブジェクトを Raven に保存すると、Raven はそれを現地時間 (Z 識別子なし) として保存することを意味します。ああ!すべての日付を UTC でデータベースに保存したい (ベスト プラクティスに従って)!

Web API のシリアライゼーションをハッキングしようとするのは、本当に大変なことです。Raven は、保存する前にすべての日付を UTC に変換する魔法のフラグで私を救うことができますか? 保存する前に、サーバー上のオブジェクトをプロパティごとに反映し、DateTimes を探して UTC に変換する必要はありません... EEEW!

提案?

ありがとう

4

3 に答える 3

3

この問題は、Json.net を ASP.NET MVC 4 RC の既定のシリアライザーとして含めることで修正されました。次のように構成します。

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.D‌​ateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc; 
于 2012-06-17T21:21:06.720 に答える
1

Adam、Time.Kindプロパティを確認してください。RavenDBは日時オブジェクトをUTCで次のように格納する必要があります。

"Time": "2012-06-12T13:07:39.0000000Z"

最後にZに注意してください。

于 2012-06-12T06:37:39.683 に答える
0

Scott Hanselman は、ASP.NET Web Api での JSON 日付の問題について詳しく説明しています。彼らは、最終リリースの前に問題を修正したいと考えているようです。それまでの間、彼は、JSON.NET を使用するようにシリアライザーを交換する比較的簡単な方法をここで指摘しています。

于 2012-06-12T23:10:35.887 に答える