2012-09-20 22 views
14

Acabo de instalar ASP MVC 4 y mis fechas JSON siguen volviendo al formato antiguo {"timestamp":"\/Date(1348070400000)\/"}.ASP MVC 4 JsonResulta cómo usar las fechas ISO 8601?

Estaba under the impression que deberían volver en el formato 2012-02-18T00:54:06.8447642Z sin que yo haga nada.

Nota: JSON.NET es ahora una parte integral de la API de Web de ASP.NET para que pueda sólo nos fuera de la caja.

Mi controlador ve algo como esto

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

¿Cómo puedo conseguir que esto funcione? ¿Debo hacer un cambio en mi Global.asax.cs o Web.config?

Respuesta

21

que estaba bajo la impresión de que se deben volver en el formato 2012-02-18T00 : 54: 06.8447642Z sin mí hacer nada.

Esto es cierto solo para ASP.NET Web API (ApiControllers). Pero las acciones estándar del controlador ASP.NET MVC que devuelven JsonResults aún usan el JavaScriptSerializer. Entonces, si quiere usar las fechas ISO 8601, puede cambiar este serializador por JSON.NET escribiendo custom action result. Sólo tiene que añadir el convertidor adecuado a los parámetros utilizados por el serializador:

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

Usted puede preguntar por qué no se implementan JSON.NET para los controladores estándar. Supongo que es por razones de compatibilidad, ya que sería un cambio importante. Pero probablemente habría hecho de JSON.NET el serializador predeterminado con una opción alternativa para aquellos que actualicen sus aplicaciones existentes.

+0

Hola, tengo un ActionResult que devuelve un PartialView con un modelo y quiero que el modelo se serialice usando la clase JsonNetResult ... ¿alguna pista? Muchas gracias – VAAA

+0

Si desea devolver JSON, en lugar de devolver un PartialView de su acción, debe devolver un ActionResult personalizado que utiliza JSON.NET como serializador, el JsonNetResult, por ejemplo. –

Cuestiones relacionadas