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

Даты без времени в выходе ASP.NET Web API JSON

Есть ли простой способ настроить JSON.NET, чтобы поля some DateTime были отформатированы без времени, а другие поля DateTime все еще будут отформатированы со временем?

Пример:

{ firstName: 'John', lastName : 'Doe', birthday: '1965-09-23' }
4b9b3361

Ответ 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 с вашими классами.

Недостаток. Свойство теперь отображается как строка в любом месте, где вы его используете, что может вызвать собственный набор проблем.