2012-09-20 2 views
14

Właśnie zainstalowałem ASP MVC 4 i moje daty JSON wciąż powracają w starym formacie {"timestamp":"\/Date(1348070400000)\/"}.ASP MVC 4 JsonResult jak używać dat ISO 8601?

Byłem under the impression, który powinien powrócić w formacie 2012-02-18T00:54:06.8447642Z beze mnie.

Uwaga: JSON.NET jest obecnie integralną częścią ASP.NET Web API, dzięki czemu można tylko my to po wyjęciu z pudełka.

Mój kontroler wyglądać tak

public JsonResult Test() 
{ 
    return Json(new {timestamp = DateTime.Now()}, JsonRequestBehavior.AllowGet); 
} 

Jak mogę uzyskać to do pracy? Czy muszę dokonać zmian w pliku Global.asax.cs lub Web.config?

Odpowiedz

21

Byłem pod wrażeniem, że powinny one być w formacie wraca do 2012-02-18T00: 54: 06.8447642Z bez mnie robi nic.

Dotyczy to wyłącznie interfejsu ASP.NET Web API (ApiControllers). Jednak standardowe akcje kontrolera ASP.NET MVC zwracające JsonResult nadal używają JavaScriptSerializer. Więc jeśli chcesz użyć dat ISO 8601 możesz zamienić ten serializator przez JSON.NET pisząc custom action result. Wystarczy dodać odpowiednią przetwornicę do ustawień używanych przez serializatora:

SerializerSettings.Converters.Add(new IsoDateTimeConverter()); 

Można się pytać, dlaczego nie realizować Json.NET dla standardowych kontrolerów. Sądzę, że to ze względu na kompatybilność, ponieważ byłaby to ważna przełomowa zmiana. Ale prawdopodobnie uczyniłbym JSON.NET domyślnym serializerem z opcją zastępczą dla tych, którzy aktualizują swoje istniejące aplikacje.

+0

Witam, mam ActionResult zwracający PartialView z modelem i chcę, aby model był serializowany przy użyciu klasy JsonNetResult ... jakiejkolwiek wskazówki? Wielkie dzięki – VAAA

+0

Jeśli chcesz zwrócić JSON, zamiast zwracania PartialView z akcji powinieneś zwrócić niestandardowy ActionResult, który używa JSON.NET jako serializera - na przykład JsonNetResult. –