2016-03-27 2 views
0

Мне нужно, чтобы каждый объект DateTime находился в базовом формате «yyyy-MM-dd».Web API 2.0 - форматирование пользовательских дат с помощью JavaScriptConverter

Когда я использовал Json.NET, чтобы сделать это, он работал отлично, добавив следующую строку в WebApiConfig.cs:

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
     new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" }); 

Однако я переработан мои контроллеры вернуть IHttpActionResult и просто return Json(objectToSerialize). Теперь форматы даты неверны, поскольку я предполагаю, что это потому, что теперь используется JavaScriptConverter. Дайте мне знать, если я ошибаюсь.

Как преобразовать каждый DateTime в моем сериализованном объекте в нужный мне формат?

По умолчанию они теперь отображаются как «1927-01-29T00: 00: 00» ... Мне нужно «1927-01-29».

Я видел некоторые сумасшедшие хаки, которые кажутся полным переполнением (например, this one).

Есть ли чистый способ сделать это?

+0

Но вам действительно нужно использовать JavaScriptConverter? –

+0

Честно говоря, я понятия не имею, вот почему я спрашиваю. Я бы предпочел глобальный параметр конфигурации, который заставляет Web API форматировать ВСЕ даты в этом формате при сериализации объектов. Контроллер возвращает 'IHttpActionResult', а возвращаемая строка' return Json (myObject) '. – Patrick

ответ

2

Ну, вы все равно можете использовать IHttpActionResult, но то, что вы возвращаете, не соответствует действительности. В вашем случае я верю, что можно исправить с помощью:

return Ok(objectToSerialize); 

он будет держать Json.NET по умолчанию в WebAPI и вы должны иметь ваша дата форматирования хранится

+0

Это сделало трюк. Благодарю. Я должен переписать много моих модульных тестов, которые ожидали JsonResult, и теперь видят OkNegotiatedContentResult, но это нормально. – Patrick

Смежные вопросы