Mam problem z deserialising datetimes z Json.Net 6.0.3 (mogę replikować problem na 6.0.6). Kod jest uruchamiany w .Net 4.5 w Windows 8.1, a kultura to en-GB.Json.Net deserialising DateTimes niekonsekwentnie
To pokazuje problem:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
var d1 = new DateTimeOffset(2014, 12, 15, 18, 0, 0, TimeSpan.FromHours(1));
var obj = new {
time = d1
};
var json = JsonConvert.SerializeObject(obj, Formatting.Indented);
Console.WriteLine(json);
var jo = JObject.Parse(json);
Console.WriteLine(jo.Value<string>("time") + " // jo.Value<string>(\"time\")");
Console.WriteLine(jo["time"] + " // jo[\"time\"]");
wyjście:
{
"time": "2014-12-15T18:00:00+01:00"
}
12/15/2014 17:00:00 // jo.Value<string>("time")
15/12/2014 17:00:00 // jo["time"]
The data czasy różnią się w zależności od sposobu JObject jest dostępny - jedno jest MM/DD/YYYY DD/MM/YYYY. Dlaczego to?
Nie potrzebuję ich w określonym formacie: problem polega na tym, że format ulega zmianie. Mam dużo starszego kodu, który analizuje ciąg datetime pochodzący z Json.Net. Kod będzie również działał na różnych komputerach na całym świecie, być może w różnych kulturach.
Czy istnieje sposób, aby Json.Net zawsze zwracał liczbę dat w tym samym formacie?
dobrze, pierwsza linia piszę 'JValue' na konsolę ... –
@JonSkeet: Cóż, tak, upraszczałem to, ale metoda' ToString' 'JValue' wywołuje wartość bazową (w tym przypadku 'DateTime')' Metoda ToString'. –
Dobrze. Byłbym niewygodny, gdybym był tobą. Podstawowa przesłanka jest w porządku (dlatego porzuciłem własną odpowiedź), ale dobrze jest precyzyjnie o tym mówić, gdy konwersje dotyczą całego miejsca. –