2016-04-12 27 views
0

'daki her öğe için özel json serileştirme IEnumerable bir enum ve DateTime olan bir nesneyi serileştirmek için Json.NET kullanıyorum. Bu gibi bir şey:IEnumerable

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

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

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

Ama enum dize olarak serialize yapmak ve DateTime dize biçimini değiştirmek için özel bir JsonConverter gerekir.

Ben enum için here belirtildiği gibi JsonConverter niteliği ve yapılması here olarak özel bir IsoDateTimeConverter kullanarak denedim:

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

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

Ben de bir IEnumerable için işe umuyordum, ama şaşırtıcı olmayan öyle değil:

'System.Enum' yazmak için 'WhereSelectArrayIterator`2 [System.Int32, Model.State]' türünde nesne dönüştürülemiyor.

JsonConverterAttribute'un, her bir öğe için numaralandırılmamış olarak değil, uygulandığını söylemenin bir yolu var mı?

+0

@juharr Bu aslında yolumda olan bir şeyi paylaşmak için bir çaba oldu. Ve benim googling becerilerimle gurur duyduğumu düşünmek için ... – andrepnh

cevap

0

aşağıdaki gibi enumerable için size JsonPropertyAttribute ve ItemConverterType özelliğini kullanmak zorunda çıkıyor:

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

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

Bu belirtilen documentation olarak:

öğelere bir JsonConverter uygulamak için Bir koleksiyonda, JsonArrayAttribute, JsonDictionaryAttribute veya JsonPropertyAttribute kullanın ve kullanmak istediğiniz dönüştürücü türüne ItemConverterType özelliğini ayarlayın.

Sen JsonArrayAttribute ile karıştırılmamalıdır olabilir, ama bir özellik hedef olamaz.

İlgili konular