8

当我使用返回包含 DateTime 属性的对象时

return Json(value);

在我收到的客户上

"/Date(1336618438854)/"

如果我使用返回相同的值

return Json(JsonConvert.SerializeObject(value));

那么返回的序列化值(连同序列化对象)是时区感知的:

"/Date(1336618438854-0400)/"

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

4

4 回答 4

11

我终于知道该怎么做了。
我会将我的项目切换到 ISO 8601 DateTime 格式。JSON.net 可以很好地完成序列化,只需使用 JsonConverter 属性装饰对象上的 datetime 属性即可。

    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 序列化可能很简单,是的,原理应该类似于这个线程:Change Default JSON Serializer Used In ASP MVC3

于 2012-05-12T18:41:24.310 回答
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);

祝你好运

于 2016-08-23T17:56:14.003 回答
-2

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

function jsonDateFormat(jsonDate) {

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

};

于 2013-02-25T07:43:59.377 回答
-2

如果您不想深入解析解析的内容,而不仅仅是将日期转换为字符串,而不是使用 JSON 解析它。

例如

return Json(DateTime.Now.ToString("your date format if you want to specify"));
于 2012-05-10T06:11:43.867 回答