2013-09-05 9 views
33

pola enum można szeregować w modelu WebAPI jako ciąg dodając atrybut:Serializować pojemnik teksty stałe jako ciągi korzystających Json.NET

enum Size 
{ 
    Small, 
    Medium, 
    Large 
} 

class Example1 
{ 
    [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] 
    Size Size { get; set; } 
} 

Będzie serializowania do tego JSON:

{ 
    "Size": "Medium" 
} 

Jak mogę zrobić to samo dla kolekcji wyrażeń?

class Example2 
{ 
    IList<Size> Sizes { get; set; } 
} 

Chcę serializacji do tego JSON:

{ 
    "Sizes": 
    [ 
    "Medium", 
    "Large" 
    ] 
} 

Odpowiedz

54

Trzeba użyć JsonPropertyAttribute.ItemConverterType właściwość:

class Example2 
{ 
    [JsonProperty (ItemConverterType = typeof(StringEnumConverter))] 
    public IList<Size> Sizes { get; set; } 
} 
+0

Jak właściwie wypełnić 'Rozmiary'? – Burjua

+0

Dziękuję bardzo, utknąłem w tym przez półtora dnia – Eman

15

mam to w kodzie startowym mojej aplikacji internetowej do serialise wszystkie teksty stałe do strun (wolę przechodzącej nazwy enum do wartości, sprawia, że ​​rzeczy bardziej wytrzymałe).

Muszę przyznać, że nigdy nie próbowałem tego na liście wyliczeń, więc nie wiem, co by z tym zrobić - warto spróbować.

var jsonFormatter = config.Formatters.JsonFormatter; 
jsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter { CamelCaseText = true }); 
+0

Tak, to będzie działać z listy teksty stałe. –

+0

Mogę potwierdzić, że to działa dla listy wyliczeń. Moje idealne rozwiązanie pozwoliłoby na opt-in na podstawie nieruchomości, ale to działa i jest lepsze niż nic. Dzięki! –

+0

@ Rozwiązanie Jon-Erica Athari również działa i da ci opcję opt-in na rzecz, której szukasz. –

Powiązane problemy