2012-11-10 15 views
6

Mam problem, który łamie mi głowę od wczoraj i nie wiem, jak sobie z nim poradzić.Deseryzacja terminów JSON bez strefy czasowej

  • Mam pole daty w mojej bazy danych, która zawiera następujące wartości:

enter image description here

  • Wtedy mój wniosek uzyskać wartość i przesyła temu do mojego formularza internetowego. (wartość wciąż taka sama :) to w porządku !!

enter image description here

  • Na stronie klienta kładę przerwę z javascript alertu, aby zobaczyć wartość, która nadchodzi z JSON (wartość ciągle to samo :) to jest to w porządku !!

enter image description here

Kod na stronie klienta dla wpisu to:

// transaction json model 
var jsonTransaction = @(Html.Raw(Json.Encode(this.Model.Transaction))); 
alert(new Date(parseInt(jsonTransaction.Date.substr(6)))); 
  • Teraz kiedy odesłać wartości do serwera jest to, co mam

enter image description here

  • I wreszcie po deserializacji JSON mój czas jest nieprawidłowy! zamiast Dnia 7 jest teraz Dzień 8 ???????

enter image description here

Jest to kod dla deserializacji:

public JsonResult SaveBill(string jsonTransaction, string jsonTranDetails) 
{ 
    _appState = this.AppState; 
    JsonResult returnVal = returnVal = Json(
     new { Success = true } 
    ); 

var transaction = JsonConvert.DeserializeObject<BillTransaction>(jsonTransaction, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore }); 

Każda wskazówka, w jaki sposób rozwiązać ten problem z datami, powinienem dostać tę samą datę, bo nic nie zmieni . Mam nadzieję, że ktoś poprowadzi mnie do rozwiązania.

Z góry dziękuję.

skrypt
+0

Jeśli korzystasz z JSON.NET Newtonsoft, ten problem zniknie. Nowy interfejs Web API z ASP.NET MVC 4 używa tego samego parsera. –

+0

Powinno to omówić wszystko, co musisz wiedzieć: http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx –

+0

Jedynym sposobem mogę dostać tę samą datę robi to po stronie serwera: JsonConvert.DeserializeObject (jsonTransaction nowe JsonSerializerSettings() {NullValueHandling = NullValueHandling.Ignore, DateFormatHandling = DateFormatHandling.MicrosoftDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.Local }); Ale nie wiem, czy za pomocą DateTimeZoneHandling.Local jest ok? – VAAA

Odpowiedz

0

Java użyć uniwersalnego czasu kiedy analizowania datę jako CurrentDate = new Date (123232) więc podczas wysyłania data klienta przekształcić go do tej pory ISO, takich jak upewnij się, że data jest w UTC przed convering go silny .

return String.Format("{0:yyyy-MM-ddTHH:mm:ss.fffZ}", dt); 

BTY już stworzony JSON Stary zastąpić dowolną datę serializacji na stronie klienta do korzystania z powyższych funkcji.

Powiązane problemy