5

JSON 日付を C# DateTime に逆シリアル化するときに、このような厄介な問題が発生しています。

コードは次のとおりです。

JavaScriptSerializer serializer = new JavaScriptSerializer();
jsonTrechos = jsonTrechos.Replace("/Date(", "\\/Date(").Replace(")/", ")\\/");
Trecho[] model = serializer.Deserialize<Trecho[]>(jsonTrechos);

jsonTrechosjson2.js の の文字列ですJSON.stringify();

問題: 逆シリアル化が機能し、Trechos オブジェクトのすべての日付に 2 時間が追加されます。

私のタイムゾーンはブラジル (UTC -3) で、何か関係がある場合は夏時間 (つまり、現在 UTC -2) を使用しています。おそらくローカリゼーションとタイムゾーンがこれに関与している可能性があり、実際にそうである場合、それを修正する方法がわかりません.

4

4 に答える 4

12

これはMSDNに記載されています。

JSON で "/Date(目盛りの数)/" として表される Date オブジェクト。ティック数は、UTC 1970 年 1 月 1 日の午前 0 時から経過したティック数 (ミリ秒) を示す正または負の long 値です。

電話DateTime.ToLocalTime()してみて、正しい日付を取得できるかどうかを確認してください。

于 2010-11-29T14:20:50.663 に答える
7

Json.NET ライブラリを使用することを強くお勧めします。率直に言って、.NET フレームワークの JSON シリアライザー (および複数のシリアライザーがあります) は、特に日付のシリアル化に関しては、何らかの形で風変わりです。

Json.NET は、それら (および一般的な JSON) を一貫して処理し、他の消費者にとって問題なく処理できる唯一のライブラリです。

于 2010-11-29T14:13:34.957 に答える
2

JSONに指定された日付はUTCであり、あなたが言及したように、夏時間を使用しているため、+2時間は理にかなっています. 理想的には、とにかく UTC 日付時刻で作業する必要があります。これにより、夏時間の頭痛の種が取り除かれ (または、この場合はそれに追加され)、グローバル ホスティングが可能になります。

于 2010-11-29T14:23:49.213 に答える
1

「Javascript の日付は、1970 年 1 月 1 日 00:00:00 世界時 (UTC) から 1 日が 86,400,000 ミリ秒を含むミリ秒単位で計算されます」(W3schools からの抜粋)。したがって、それをローカルのタイムゾーンに変換します。

TimeZoneInfo.ConvertTimeFromUtc(yourDateToConvert, TimeZoneInfo.Local)
于 2011-03-07T22:00:06.083 に答える