ASP.NET MVC Controller.Json DateTime序列化与NewtonSoft Json DateTime序列化

时间:2012-05-10 03:05:52

标签: asp.net json asp.net-mvc-3 datetime serialization

当我使用

返回包含DateTime属性的对象时
return Json(value);

在我收到的客户端上

"/Date(1336618438854)/"

如果我使用

返回相同的值
return Json(JsonConvert.SerializeObject(value));

然后返回的序列化值(与序列化对象一起)是时区识别:

"/Date(1336618438854-0400)/"

有没有办法在没有双序列化的情况下获得一致的DateTime结果?我在某处读过MS会将Newtonsoft JSON包含在MVC中吗?

4 个答案:

答案 0 :(得分:8)

我终于想出了该怎么做 我将我的项目切换为ISO 8601 DateTime格式。只需使用JsonConverter属性修饰对象上的datetime属性,就可以很好地与JSON.net完成序列化。

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

要将序列化对象返回给客户端ajax调用,我可以这样做:

    return Json(JsonConvert.SerializeObject(complexObjectInstance));

并在客户端:

    jsObject = JSON.parse(result)

现在我认为将默认的ASP.NET MVC默认JSON序列化器覆盖到Newtonsoft JSON.net ISO 8601序列化可能很简单,并且yes原则应该与此线程类似:Change Default JSON Serializer Used In ASP MVC3

答案 1 :(得分:0)

WebApiConfig 中设置:

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();

在ApiController中返回:

return Request.CreateResponse(HttpStatusCode.OK, obj);
祝你好运 CAhumada

答案 2 :(得分:-2)

如果你不想深入研究Parsing的东西而不是简单地将你的日期转换为字符串而不是用JSON解析它。

例如

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

答案 3 :(得分:-2)

它返回服务器日期格式。您需要定义自己的功能。

function jsonDateFormat(jsonDate) {

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

};