如何使用JsonConverter属性格式化日期列表

时间:2017-05-11 09:43:08

标签: json list date

我正在开发一个以JSON格式返回数据的WebApi 2服务。我对DateTimes使用两种格式,日期:“2017-01-31”和日期时间:“2017-01-31T12:00:00.000Z”。日期时间格式使用最多,所以我将其设置为global.asax中的默认值:

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter() { DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'" });

我在那些需要格式化为日期的DateTime字段上使用自定义IsoDateTimeConverter的JsonConverter属性:

public class Foo
{
    [JsonConverter(typeof(OnlyDateConverter))]
    public DateTime Bar { get; set; }
}

public class OnlyDateConverter : IsoDateTimeConverter
{
    public OnlyDateConverter()
    {
        DateTimeFormat = "yyyy-MM-dd";
    }
}

到目前为止一切都很好,这就像一个魅力。

但这是问题所在: 对于某些对象,我有一个需要格式化为日期的DateTime对象列表。但JSON转换器似乎不支持在列表中使用JsonConverter属性。

public class Foo
{
    [JsonConverter(typeof(OnlyDateConverter))] // This works
    public DateTime Bar { get; set; }

    [JsonConverter(typeof(OnlyDateConverter))] // This does not work!
    public List<DateTime> Bars { get; set; }
}

这会导致以下错误:转换日期时出现意外值。预期的DateTime或DateTimeOffset,得到了System.Collections.Generic.List`1 [System.DateTime]。

很明显,你不能在日期列表中使用[JsonConverter(typeof(OnlyDateConverter))]。但是,如何将DateTime列表格式化为日期?

我一直在寻找一个解决方案但除了创建一个只包含一个带属性的DateTime属性的类之外,似乎找不到任何其他东西。但这对我来说似乎不对。

当然必须有一种方法在DateTimes列表中使用JsonConverter属性?我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

使用[JsonProperty(ItemConverterType = typeof(MyDateTimeConverter))]