カスタムDateTimeConverterBase
実装の不足で、Json.NET 4.5+ を use に設定したときに、指定されたDateFormatHandling.MicrosoftDateFormat
非 UTC のタイムゾーン オフセットを追加しないようにする方法はありDateTime
ますか?
"\/Date(1333645844276-0600)\/"
詳細
API プロジェクトを組み込みの .NETJavaScriptSerializer
から Json.NET を使用して JSON を生成するように切り替えています。Json.NET では、UTCDateTime
のデフォルトの日時シリアル化は .NET バージョンと同様でした。
"\/Date(1333645844276)\/"
非 UTC の場合、 とは異なりJavaScriptSerializer
、Json.NET はタイムゾーン オフセットを結果に追加します (私の地域では、この時期は -6):
"\/Date(1333645844276-0600)\/"
Json.NET 4.5+を\/Date(...)\/
フォーマットに戻すために使用しているコードは次のとおりです(と呼ばれますMicrosoftDateFormat
):
JsonSerializerSettings customJsonSettings = new JsonSerializerSettings() {
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
};
string result = JsonConvert.SerializeObject(DateTime.Now, customJsonSettings);
解決策は、Json.NET に別のDateTimeZoneHandling
設定を使用するように指示するのと同じくらい簡単に思えました。DateTimeZoneHandling
( Local
、Utc
、Unspecified
、および)のすべての設定を試しましRoundtripKind
たが、すべて出力で「-0600」が維持されます。実際、それらはすべて非 UTC に対して同じ結果を生成しDateTime
ます。
JsonSerializerSettings customJsonSettings = new JsonSerializerSettings() {
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
string result = JsonConvert.SerializeObject(DateTime.Now, customJsonSettings);
"\/Date(1333647855743-0600)\/"
警告
理想的には、すべての時間を既に UTC に合わせておきます。私は確かに、この API の次のバージョンでそうするつもりです。これはライブ API であるため、新しいバージョンがリリースされるまで、出力の変更を危険にさらす価値はありません。ほとんどの JSON 解析システムでは問題にならないようですが、JSON 標準では日付のシリアル化について公式に何も述べられていないため、変更の危険を冒すことはできません。