Вопрос по asp.net, json, asp.net-mvc-3 – ASP.NET MVC Controller.Json DateTime Сериализация против NewtonSoft Json DateTime Сериализация
Когда я возвращаю объект, который содержит свойство DateTime, используя
<code>return Json(value); </code>
на клиенте получаю
<code>"/Date(1336618438854)/" </code>
Если я верну то же значение, используя
<code>return Json(JsonConvert.SerializeObject(value)); </code>
затем возвращаемое сериализованное значение (вместе с сериализованным объектом) учитывает часовой пояс:
<code>"/Date(1336618438854-0400)/" </code>
Есть ли способ получить согласованный результат DateTime без двойной сериализации? Я где-то читал, что MS будет включать Newtonsoft JSON в MVC?
$.parseJSON(result)
будет правильно разбирать даты.stackoverflow.com/a/4540007/752974
Pete
Я наконец понял, что делать.
I will switch my project to ISO 8601 DateTime format. Serialization is done nicely with JSON.net, just by decorating the datetime property on the object with JsonConverter attribute.
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)
Теперь я думаю, что было бы, вероятно, просто переопределить сериализатор JSON по умолчанию ASP.NET MVC для нас. Сериализация Newtonsoft JSON.net ISO 8601, и принцип yes должен быть похож на этот поток:Изменить используемый по умолчанию сериализатор JSON, используемый в ASP MVC3.
$.parseJSON(result)
Error: User Rate Limit Exceededstackoverflow.com/a/4540007/752974
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
то просто конвертируйте свою дату в строку, а затем анализируйте ее с помощью JSON.
например
return Json(DateTime.Now.ToString("your date format if you want to specify"));