Формат даты ASP.NET Web API в JSON не сериализуется успешно

Все,

Мы используем ASP.NET Web API, где у нас есть сервис на основе REST с JSON для полезной нагрузки. Если я передам следующую дату в виде строки, например

sampleObj: {
...
myDate: "31/12/2011 00:00:00",
...
}

в качестве значения атрибута в полезной нагрузке JSON атрибут даты десериализуется в DateTime.MinValue. Действителен ли формат строки?

Мы знаем, что формат "2012-10-17 07:45:00" успешно сериализуется, но мы не можем гарантировать, что все полученные даты будут в этом формате. Какие допустимые варианты?

2 ответа

Решение

В ASP.NET Web API вы можете добавить различные Json.NET DateTimeConverter через SerializerSettings JsonFormatter, чтобы ваша служба понимала другой формат DateTime.

Тем не менее, я не думаю, что по умолчанию DateTimeConverter из Json.NET принимает этот формат "31/12/2011 00:00:00". В этом случае вы реализуете свой пользовательский DateTimeConverter.

WebApiConfig.cs:

        config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
             new IsoDateTimeConverter());
        config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
             new MyDateTimeConverter());

Пользовательский DateTimeConverter:

public class MyDateTimeConverter : DateTimeConverterBase
{
    //...
}  

Для получения дополнительной информации о том, как написать собственный DateTimeConverter, я нашел кое-что в stackru, которое может оказаться полезным: как создать пользовательский конвертер даты в строку json.net.

Просто установите глобализацию в web.config:

<globalization enableClientBasedCulture="false" requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB"/>

а затем в Global.asax.cs > Application_Start установите JsonFormatter для использования текущей культуры:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.Culture = System.Globalization.CultureInfo.CurrentCulture;
Другие вопросы по тегам