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

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

Все,

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

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

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

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

4b9b3361

Ответ 1

В ASP.NET Web API вы можете добавить различные Json.NET DateTimeConverters через JsonFormatter SerializerSettings, чтобы ваша служба понимала другой формат 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, я нашел что-то в stackoverflow, которое может вам пригодиться: Как создать json.net Date to String custom Converter.

Ответ 2

Просто установите глобализацию в 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;