IEnumerable中每个项目的自定义json序列化
我正在使用Json.NET来序列化具有枚举和DateTime
的IEnumerable
的对象。 它是这样的:
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,您必须使用JsonPropertyAttribute
和ItemConverterType
属性,如下所示:
[JsonProperty(ItemConverterType = typeof(StringEnumConverter))] public IEnumerable Data { get; set; } [JsonProperty(ItemConverterType = typeof(MyDateTimeConverter))] public IEnumerable XAxis { get; set; }
这在文档中提到:
要将JsonConverter应用于集合中的项,请使用JsonArrayAttribute,JsonDictionaryAttribute或JsonPropertyAttribute,并将ItemConverterType属性设置为要使用的转换器类型。
您可能会对JsonArrayAttribute
感到困惑,但它无法定位属性。