Подтвердить что ты не робот

Как передать значение даты JSON через ASP.NET MVC с помощью JSON.NET?

Возможный дубликат:
Отформатируйте дату Microsoft JSON?

Функция ASP.NET Json() форматирует и возвращает дату как

{"d":"\/Date(1240718400000)\/"}

который должен решаться на стороне клиента, что является проблематичным. Каковы ваши предложения относительно подходов к отправке значений даты взад и вперед?

4b9b3361

Ответ 1

Это было найдено в другом сообщении в Stack Overflow:

var date = new Date(parseInt(jsonDate.substr(6))); 

Функция substr вынимает "/Date (" part ", а функция parseInt получает целое число и игнорирует" )/"в конце. Полученное число передается в конструктор Date.

Ответ 2

Если вы не привязаны к сериализатору MS JSON, вы можете использовать Json.NET. Он поставляется с IsoDateTimeConverter для обработки проблем с сериализацией дат. Это приведет к сериализации даты в формате ISO 8601.

Например, в нашем проекте сериализация myObject обрабатывается с помощью следующего кода.

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
jsonNetResult.Data = myObject;

Если вы решите выполнить Json.NET, вы также захотите захватить JsonNetResult, поскольку он возвращает ActionResult, который может использоваться в Приложение ASP.NET MVC. Он довольно прост в использовании.

Для получения дополнительной информации см. Good (Date) Times с Json.NET

Ответ 3

Он может быть уродливым, но он работает:

 var epoch = (new RegExp('/Date\\((-?[0-9]+)\\)/')).exec(d);
 $("#field").text((new Date(parseInt(epoch[1]))).toDateString());

Возможно, нет необходимости сопоставлять всю строку, а просто (-? [0-9] +) достаточно...

Ответ 5

После игры с библиотекой Json.NET мне интересно, почему вы решили использовать IsoDateTimeConverter над JavascriptDateTimeConverter.

Я нашел, что это проще в использовании с Ext JS интерфейсами, которые я использовал при сериализации дат из MVC-контроллера.

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new JavaScriptDateTimeConverter());
jsonNetResult.Data = myObject; 

Я возвращаю эти данные в файл Ext.data.JsonStore, который может получить возвращаемое значение в качестве даты без необходимости указывать формат даты для синтаксического анализа.

        store:new Ext.data.JsonStore({
            url: pathContext + '/Subject.mvc/Notices',
            baseParams: { subjectId: this.subjectId },
            fields: [
               {name: 'Title'},
               {name: 'DateCreated', type: 'date' }
            ]
        }),

Возврат JSON выглядит следующим образом:

[{"Title":"Some title","DateCreated":new Date(1259175818323)}]

Нет никаких оснований для преобразования в формат ISO 8601 и обратно, если вам это не нужно.

Ответ 6

Автоматическое преобразование дат на стороне клиента (если вы используете jQuery)

-

Вы не указали его, но поскольку вы используете ASP.NET MVC, вы можете использовать jQuery. Если вы это сделаете, преобразование в фактические даты стало проще, если вы использовали код, указанный в этом сообщении в блоге. Код расширяет функциональность jQuery $.parseJSON(), поэтому он автоматически преобразует строки даты ISO и ASP.NET в фактические даты JavaScript.

Я использую его с ASP.NET MVC, и он работает как шарм. Лучшая часть состоит в том, что он также обратно совместим. Существующий код, который использует $.parseJSON(), будет работать так же, как и раньше (и фактически работает так же), но если вы предоставите второй параметр и установите его значение на true, все даты будут автоматически преобразованы для вас.

Расширение использует встроенную поддержку JSON для браузера, где это применимо, а также работает в других, которые этого не делают. Современные браузеры поддерживают эту функциональность в любом случае.

Ответ 7

Взгляните на сообщение в блоге jQuery, Ajax, ASP.NET и даты.

Подробности о работе с ASP.NET MVC и jQuery для передачи дат через JSON между сервером и клиентской стороной.