Попробуйте этот атрибут JsonConvert для пользовательской даты
public class MyDateTimeConverter : IsoDateTimeConverter
{
public MyDateTimeConverter()
{
base.DateTimeFormat = "dd-MM-yyyy";
}
}
И используйте атрибут для своего свойства как
public class MyClass
{
[JsonConverter(typeof(MyDateTimeConverter))]
public DateTime MyDate { get; set; }
}
, это автоматически преобразует тело в ожидаемый формат.
Если вы ожидаете все свойства datetime в этом формате, добавьте эти глобальные настройки в ваши startup.cs
services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.DateFormatString= "dd-MM-yyyy";
});
Но вы должны убедиться, что все значения, указанные для этого свойства, должны быть в предоставленном формат. Надеюсь, это поможет :)
Если вы хотите изменить культуру, используемую вашим сервисом, вы можете установить ее в Startup.cs
и добавить в метод Configure()
.
Это работает для меня (добавьте его до app.UseMVC()
):
var defaultCulture = new CultureInfo("tr-TR");
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture(defaultCulture),
SupportedCultures = new List<CultureInfo> { defaultCulture },
SupportedUICultures = new List<CultureInfo> { defaultCulture }
});
РЕДАКТИРОВАТЬ
Хорошо, поэтому я проверил это, и он корректно отображает дату в дд.ММ.ГГГГ формат, когда я звоню .ToShortDateString()
, поэтому я думал, что это работает. Но когда я проверял POSTing дату, она не будет правильно связываться / анализироваться. Однако он успешно проанализирует дату в формате MM.dd.yyyy. Похоже, вам нужно добавить культуру, используя app.UseRequestLocalization(...)
и , чтобы указать сериализатору JSON также использовать правильный формат (как сказал @Farshan). strike>
ОБНОВЛЕНИЕ
Можно установить культуру сериализатора JSON. Вы можете установить его в AddJsonOptions()
. Это работает для меня. Попробуйте добавить это к методу ConfigureServices
, и, надеюсь, это решит проблему.
services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.Culture = new CultureInfo("tr-TR");
// next line probably not needed
// options.SerializerSettings.DateFormatString = "dd.MM.yyyy";
});