IEnumerable中每个项目的自定义json序列化

我正在使用Json.NET来序列化具有枚举和DateTimeIEnumerable的对象。 它是这样的:

 class Chart { // ... public IEnumerable YAxis { get; set; } public IEnumerable Data { get; set; } public IEnumerable XAxis { get; set; } } 

但我需要一个自定义的JsonConverter来使枚举序列化为字符串并更改DateTime字符串格式。

我已经尝试使用这里提到的JsonConverter属性用于枚举和自定义IsoDateTimeConverter如下所示:

 [JsonConverter(typeof(StringEnumConverter))] public IEnumerable Data { get; set; } [JsonConverter(typeof(MyDateTimeConverter))] public IEnumerable XAxis { get; set; } 

我希望它也适用于IEnumerable ,但不出所料,它不会:

无法将类型为’WhereSelectArrayIterator`2 [System.Int32,Model.State]’的对象强制转换为’System.Enum’。

有没有办法说JsonConverterAttribute适用于每个项目而不是可枚举本身?

事实certificate,对于enumerables,您必须使用JsonPropertyAttributeItemConverterType属性,如下所示:

 [JsonProperty(ItemConverterType = typeof(StringEnumConverter))] public IEnumerable Data { get; set; } [JsonProperty(ItemConverterType = typeof(MyDateTimeConverter))] public IEnumerable XAxis { get; set; } 

这在文档中提到:

要将JsonConverter应用于集合中的项,请使用JsonArrayAttribute,JsonDictionaryAttribute或JsonPropertyAttribute,并将ItemConverterType属性设置为要使用的转换器类型。

您可能会对JsonArrayAttribute感到困惑,但它无法定位属性。