組み込みの.net JavaScriptSerializerを使用してDateTimeをシリアル化および逆シリアル化すると、UTC +の場合は2つの異なる日付になります。.net DateTimeシリアル化逆シリアル化のバグ
例(私は今の私のようにあなたはUTC + 2であると仮定)
JavaScriptSerializer myJson = new JavaScriptSerializer();
DateTime myDate = DateTime.Now; //suppose 2016-03-29 16:12:00
strSerialized = myJson.Serialize(myDate);
//DO WHAT YOU NEED WITH IT...
DateTime myDateDes = myJson.Deserialize<DateTime>(strSerialized);
Label1.Text=myDateDes.ToString();//it gives you 2016-03-29 14:12:00 ! WRONG! IT's in UTC+0 ! Has 2 HOURS less !!!
ですから、デシリアライズされた日付を取得する場合、それはデフォルトであなたにUTC + 0値をあげます...! !
これは、異なるdatetimeデータ型の逆シリアル化の違いについて説明し、問題を解決しないソリューション(.UtcDateTime)を提供するため、JavaScriptSerializer UTC DateTime issuesとは異なります。実際には、.utcDateTimeでシリアル化されたDateTimeを使用して非直列化しようとすると、間違ったUTC + 0の日付が返されます...
私の推薦DateTimeOffsetオブジェクトをシリアル化/逆シリアル化する必要があります。 –
私の場合、DateTimeが必要でした... DateTimeOffsetは29/03/2016 17:00:23 +02:00のようなutcオフセットを与えますが、逆シリアル化後は常にutc + 0に変換されます(29/03/2016 15:00:23 + 00:00)。これは後ろに何が起こるのか理解するのに便利ですが、私の場合は単純に...シリアル化されたものをそのままdeserializeする必要がありました。変更されたutcバージョンではありません。 – BitQuestions
これは実際には、シリアライザ。 – Jeff