2016-04-12 8 views
0

私は、Json.NETを使用して、IEnumerableのenumとDateTimeを持つオブジェクトをシリアル化しています。それはのようなものです:IEnumerableの各項目のカスタムjsonシリアライゼーション

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

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

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

しかし、私は列挙型を文字列としてシリアライズしDateTime文字列の書式を変更するために作成するカスタムJsonConverterを必要としています。

私は列挙型のためhere述べたようにJsonConverter属性と行わhereなどのカスタムIsoDateTimeConverterを使用して試してみた:

[JsonConverter(typeof(StringEnumConverter))] 
public IEnumerable<State> Data { get; set; } 

[JsonConverter(typeof(MyDateTimeConverter))] 
public IEnumerable<DateTime> XAxis { get; set; } 

私はそれがあまりにもIEnumerableのために働くだろう期待していたが、当然、それはしません。

タイプ 'WhereSelectArrayIterator`2 [System.Int32、Model.State]のオブジェクトを「System.Enum」と入力できません。

JsonConverterAttributeが各項目に適用され、列挙可能ではないと言う方法はありますか?

+0

@juharrこれは実際に自分のやり方で得たものを共有するための努力でした。私のグーグル・スキルが自慢していると思う... – andrepnh

答えて

0

あなたは次のようにJsonPropertyAttributeItemConverterTypeプロパティを使用する必要がenumerablesのためにあることが判明:アイテムにJsonConverterを適用するには

[JsonProperty(ItemConverterType = typeof(StringEnumConverter))] 
public IEnumerable<State> Data { get; set; } 

[JsonProperty(ItemConverterType = typeof(MyDateTimeConverter))] 
public IEnumerable<DateTime> XAxis { get; set; } 

これは次のようにdocumentationに記載されていますコレクションでは、JsonArrayAttribute、JsonDictionaryAttribute、JsonPropertyAttributeのいずれかを使用し、ItemConverterTypeプロパティを使用するコンバータの種類に設定します。

JsonArrayAttributeと混同されることがありますが、 はプロパティをターゲティングできません。

関連する問題