Zapobiegaj dodawaniu przesunięcia strefy czasowej w programie Json.NET 4.5 podczas korzystania z MicrosoftDateFormat
Brak zwyczajuDateTimeConverterBase
implementacja, jest jakiś sposób na utrzymanie Json.NET 4.5+, gdy jest ustawiony do użyciaDateFormatHandling.MicrosoftDateFormat
, od dodania przesunięcia strefy czasowej dla dowolnego nie-UTCDateTime
to jest dane?
<code>"\/Date(1333645844276-0600)\/" </code>Detale
Zmieniam projekt API z wykorzystaniem wbudowanej platformy .NETJavaScriptSerializer
do korzystania z Json.NET do generowania JSON. W Json.NET dla UTCDateTime
, domyślna serializacja datetime była podobna do wersji .NET:
<code>"\/Date(1333645844276)\/" </code>
W przeciwieństwie do innych niż UTCJavaScriptSerializer
, Json.NET dołącza przesunięcie strefy czasowej do wyników (-6 dla mojego obszaru, o tej porze roku):
<code>"\/Date(1333645844276-0600)\/" </code>
Oto kod, którego używam do przełączenia Json.NET 4.5+ z powrotem na\/Date(...)\/
format (tzwMicrosoftDateFormat
):
<code>JsonSerializerSettings customJsonSettings = new JsonSerializerSettings() { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat }; string result = JsonConvert.SerializeObject(DateTime.Now, customJsonSettings); </code>
Rozwiązanie wydawało się tak proste, jak nakazanie Json.NET użycia innegoDateTimeZoneHandling
oprawa. Próbowałem każdego ustawienia dlaDateTimeZoneHandling
(Local
, Utc
, Unspecified
, iRoundtripKind
) i wszystkie zachowują „-0600” na wyjściu. W rzeczywistości wszystkie one dają identyczne wyniki dla nie-UTCDateTime
.
<code>JsonSerializerSettings customJsonSettings = new JsonSerializerSettings() { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.Utc }; string result = JsonConvert.SerializeObject(DateTime.Now, customJsonSettings); "\/Date(1333647855743-0600)\/" </code>Uwaga
Idealnie byłoby, gdybym miał już wszystkie czasy w UTC. Z pewnością planuję to zrobić za pomocą następnej wersji tego API. Ponieważ jest to API na żywo, nie warto ryzykować zmiany danych wyjściowych, dopóki nowa wersja nie zostanie wydana. Wydaje się, że nie stanowi to problemu dla większości systemów analizujących JSON, ale nie mogę ryzykować zmiany, ponieważ standard JSON oficjalnie nie mówi nic o serializacji daty.