Подтвердить что ты не робот

Сериализовать контейнер перечислений в виде строк с помощью JSON.net

Вы можете сериализовать поле перечисления в модели WebAPI в виде строки, добавив атрибут:

enum Size
{
    Small,
    Medium,
    Large
}

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

Это приведет к сериализации этого JSON:

{
  "Size": "Medium"
}

Как я могу сделать то же самое для коллекций перечислений?

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

Я хочу сериализовать этот JSON:

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

Ответ 1

Вам нужно использовать свойство JsonPropertyAttribute.ItemConverterType:

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

Ответ 2

У меня есть это в коде запуска моего веб-приложения для сериализации всех перечислений в строки (я предпочитаю передавать имена перечислений в значения, делает вещи более надежными).

Должен признаться, что я никогда не пробовал его в списке перечислений, хотя я не знаю, что бы с этим делать - может быть стоит попробовать.

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