我正在开发一个以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属性?我在这里缺少什么?
答案 0 :(得分:1)
使用[JsonProperty(ItemConverterType = typeof(MyDateTimeConverter))]