当我使用
返回包含DateTime属性的对象时return Json(value);
在我收到的客户端上
"/Date(1336618438854)/"
如果我使用
返回相同的值return Json(JsonConvert.SerializeObject(value));
然后返回的序列化值(与序列化对象一起)是时区识别:
"/Date(1336618438854-0400)/"
有没有办法在没有双序列化的情况下获得一致的DateTime结果?我在某处读过MS会将Newtonsoft JSON包含在MVC中吗?
答案 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");
};