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

时间:2016-04-12 17:46:48

标签: c# json json.net

我使用Json.NET序列化一个枚举IEnumerableDateTime的对象。它类似于:

class Chart
{
    // ...
    public IEnumerable<int> YAxis { get; set; }

    public IEnumerable<State> Data { get; set; }

    public IEnumerable<DateTime> XAxis { get; set; }
}

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

我已尝试使用JsonConverter提到的IsoDateTimeConverter属性用于枚举,自定义[JsonConverter(typeof(StringEnumConverter))] public IEnumerable<State> Data { get; set; } [JsonConverter(typeof(MyDateTimeConverter))] public IEnumerable<DateTime> XAxis { get; set; } 已完成here

IEnumerable

我希望它也可以用于JsonConverterAttribute,但不出所料:

  

无法转换类型&#39; WhereSelectArrayIterator`2 [System.Int32,Model.State]&#39;输入&#39; System.Enum&#39;。

有没有办法说[JsonProperty(ItemConverterType = typeof(StringEnumConverter))] public IEnumerable<State> Data { get; set; } [JsonProperty(ItemConverterType = typeof(MyDateTimeConverter))] public IEnumerable<DateTime> XAxis { get; set; } 适用于每个项目而不适用于可枚举本身?

1 个答案:

答案 0 :(得分:4)

事实证明,对于可枚举项,您必须使用hereJsonPropertyAttribute属性,如下所示:

JsonArrayAttribute

ItemConverterType中提到了这一点:

  

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

你可能会对from Bio import SeqIO from Bio.SeqUtils.ProtParam import ProteinAnalysis for seq_record in SeqIO.parse("protein_x.txt", "fasta"): print(seq_record.id), ProteinAnalysis(repr(seq_record.seq)).get_amino_acids_percent().items() 感到困惑,但它  无法定位财产。