Даты без времени в выходе ASP.NET Web API JSON
Есть ли простой способ настроить JSON.NET, чтобы поля some DateTime
были отформатированы без времени, а другие поля DateTime
все еще будут отформатированы со временем?
Пример:
{ firstName: 'John', lastName : 'Doe', birthday: '1965-09-23' }
Ответы
Ответ 1
Если вам нужно, чтобы это повлияло только на конкретное поле, сначала создайте тип конвертера:
public class OnlyDateConverter : IsoDateTimeConverter
{
public OnlyDateConverter()
{
DateTimeFormat = "yyyy-MM-dd";
}
}
а затем добавьте этот атрибут в любые поля/свойства, которые вы хотите использовать для этого:
[JsonConverter(typeof(OnlyDateConverter))]
Ответ 2
Попробуйте добавить эту строку для настройки вашего веб-API:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" });
Ответ 3
Ответ Yousesef с OnlyDateConverter
является лучшим. Но вот одна из альтернатив:
private DateTime _birthday;
public string Birthday
{
get { return _birthday.ToString("yyyy-MM-dd"); }
set {
_birthday = DateTime.ParseExact(value, "yyyy-MM-dd",
CultureInfo.InvariantCulture);
}
}
Преимущество. Вам не нужно связывать библиотеку Newtonsoft.Json с вашими классами.
Недостаток. Свойство теперь отображается как строка в любом месте, где вы его используете, что может вызвать собственный набор проблем.