Serialize um contêiner de enums como strings usando o JSON.net

Você pode serializar um campo enum em um modelo WebAPI como uma string, adicionando um atributo:

enum Size { Small, Medium, Large } class Example1 { [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] Size Size { get; set; } } 

Isso será serializado para este JSON:

 { "Size": "Medium" } 

Como posso realizar o mesmo para uma coleção de enums?

 class Example2 { IList Sizes { get; set; } } 

Quero serializar para este JSON:

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

Você precisa usar a propriedade JsonPropertyAttribute.ItemConverterType :

 class Example2 { [JsonProperty (ItemConverterType = typeof(StringEnumConverter))] public IList Sizes { get; set; } } 

Eu tenho isso no código de boot do meu aplicativo web para serializar todas as enums para seqüências de caracteres (eu prefiro passando nomes de enum para valores, torna as coisas mais robustas).

Deve admitir que eu nunca tentei em uma lista de enums embora assim eu não sei o que faria com isso – pode valer a pena tentar.

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