Формат даты 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;