2012-05-10 32 views
5

Cuando vuelva objeto que contiene la propiedad DateTime usandoASP.NET MVC Controller.Json DateTime serialización JSON vs NewtonSoft DateTime serialización

return Json(value); 

en el cliente recibo

"/Date(1336618438854)/" 

si regreso el mismo valor utilizando

return Json(JsonConvert.SerializeObject(value)); 

luego el valor retornado serializado (junto con el objeto serializado) i s zona horaria consciente:

"/Date(1336618438854-0400)/" 

¿Hay alguna manera de obtener un resultado de fecha y hora constante sin una doble serialización? Leí en alguna parte que MS incluirá Newtonsoft JSON en MVC.

+0

ha oído hablar de Google? primer resultado ... http://james.newtonking.com/archive/2009/02/20/good-date-times-with-json-net.aspx – MilkyWayJoe

+0

Hmm Google? Eso suena familiar. La serialización de Newton está funcionando bien. La pregunta es por qué MVC está ignorando la zona horaria cuando han adoptado/Date()/format. – user1188755

+0

Simplemente usando '$ .parseJSON (resultado)' analizará correctamente las fechas. http://stackoverflow.com/a/4540007/752974 – Pete

Respuesta

-2

Si no desea profundizar en la función de análisis, simplemente convierta su fecha en la cadena y analícela con JSON.

por ejemplo

return Json(DateTime.Now.ToString("your date format if you want to specify")); 
+0

Lo sentimos, pero esta publicación no trata de mostrar fechas.Se trata de la coherencia en el formato de fecha serializada para objetos complejos que contienen propiedades DateTime en escenarios de servidor a cliente y de cliente a servidor. Y lo que está sugiriendo que estoy haciendo en la 2.ª línea con SerializeObject para todo el objeto. – user1188755

+0

@ user1188755 ... verifique a continuación este http://stackoverflow.com/questions/668488/parsing-json-datetime-from-newtonsofts-json-serializer –

8

que finalmente descubrió qué hacer.
Cambiaré mi proyecto al formato ISO 8601 DateTime. La serialización se realiza muy bien con JSON.net, simplemente decorando la propiedad datetime en el objeto con el atributo JsonConverter.

public class ComplexObject 
    { 
     [JsonProperty] 
     public string ModifiedBy { get; set; } 
     [JsonProperty] 
     [JsonConverter(typeof(IsoDateTimeConverter))] 
     public DateTime Modified { get; set; } 
     ... 
    } 

Para regresar objeto serializado a la llamada ajax cliente que puedo hacer:

return Json(JsonConvert.SerializeObject(complexObjectInstance)); 

y en el cliente:

jsObject = JSON.parse(result) 

Ahora estoy pensando que sería probablemente sencilla para anular el serializador JSON predeterminado predeterminado de ASP.NET MVC para nosotros la serialización Newtonsoft JSON.net ISO 8601, y el principio sí debería ser similar a este hilo: Change Default JSON Serializer Used In ASP MVC3.

+0

Gran respuesta, pero encontré que los atributos de Newtonsoft.Json no son necesarios. Simplemente usando '$ .parseJSON (result)' analizará correctamente las fechas. http://stackoverflow.com/a/4540007/752974 – Pete

-2

Devuelve el formato de fecha del servidor. Necesitas definir tu propia función.

function jsonDateFormat(jsonDate) { 

// Changed data format; 
return (new Date(parseInt(jsonDate.substr(6)))).format("mm-dd-yyyy/h:MM tt"); 

};

+1

¿Qué es '.format'? –

0

En el WebApiConfig conjunto:

config.Formatters.Remove(config.Formatters.XmlFormatter); 
     //config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
     config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json")); 
     config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
     config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; 
     config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat; 

     config.MapHttpAttributeRoutes(); 

En el ApiController Retorno Este:

return Request.CreateResponse(HttpStatusCode.OK, obj); 

buena suerte CAhumada

Cuestiones relacionadas