Вопрос по asp.net, json, asp.net-mvc-3 – ASP.NET MVC Controller.Json DateTime Сериализация против NewtonSoft Json DateTime Сериализация

5

Когда я возвращаю объект, который содержит свойство 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?

Хм гугл? Это звучит знакомо. Сериализация Ньютона работает нормально. Вопрос в том, почему MVC игнорирует часовой пояс, когда они приняли / Date () / формат. user1188755
когда-нибудь слышали о Google? первый результат ...james.newtonking.com/archive/2009/02/20/… MilkyWayJoe
Просто используя$.parseJSON(result) будет правильно разбирать даты.stackoverflow.com/a/4540007/752974 Pete

Ваш Ответ

4   ответа
-2

функцию.

function jsonDateFormat(jsonDate) {

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

};

то, что & APOS; s.format?
8

Я наконец понял, что делать.
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.

Error: User Rate Limit Exceeded$.parseJSON(result)Error: User Rate Limit Exceededstackoverflow.com/a/4540007/752974
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

то просто конвертируйте свою дату в строку, а затем анализируйте ее с помощью JSON.

например

return Json(DateTime.Now.ToString("your date format if you want to specify"));
Извините, но этот пост не о показе дат. Речь идет о согласованности в сериализованном формате даты для сложных объектов, содержащих свойства DateTime в сценариях сервер-клиент и клиент-сервер. И то, что вы предлагаете, я делаю во 2-й строке с SerializeObject для всего объекта. user1188755
Error: User Rate Limit Exceededstackoverflow.com/questions/668488/…

Похожие вопросы