Serializar un contenedor de enumeraciones como cadenas usando JSON.net


Puede serializar un campo de enumeración en un modelo WebAPI como una cadena añadiendo un atributo:

enum Size
{
    Small,
    Medium,
    Large
}

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

Esto se serializará a este JSON:

{
  "Size": "Medium"
}

¿Cómo puedo lograr lo mismo para una colección de enumeraciones?

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

Quiero serializar a este JSON:

{
  "Sizes":
  [
    "Medium",
    "Large"
  ]
}
Author: Jon-Eric, 2013-09-05

2 answers

Necesita usar JsonPropertyAttribute.ItemConverterType propiedad:

class Example2
{
    [JsonProperty (ItemConverterType = typeof(StringEnumConverter))]
    public IList<Size> Sizes { get; set; }
}
 68
Author: Athari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-13 18:36:50

Tengo esto en el código de inicio de mi aplicación web para serializar todas las enumeraciones en cadenas (prefiero pasar nombres de enumeración a valores, hace que las cosas sean más robustas).

Debo admitir que nunca lo he probado en una lista de enumeraciones, así que no se qué haría con eso, podría valer la pena intentarlo.

var jsonFormatter = config.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter { CamelCaseText = true });
 15
Author: MarcE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-05 15:23:31