Ответ 1
Вам нужно использовать свойство JsonPropertyAttribute.ItemConverterType
:
class Example2
{
[JsonProperty (ItemConverterType = typeof(StringEnumConverter))]
public IList<Size> Sizes { get; set; }
}
Вы можете сериализовать поле перечисления в модели 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"
]
}
Вам нужно использовать свойство JsonPropertyAttribute.ItemConverterType
:
class Example2
{
[JsonProperty (ItemConverterType = typeof(StringEnumConverter))]
public IList<Size> Sizes { get; set; }
}
У меня есть это в коде запуска моего веб-приложения для сериализации всех перечислений в строки (я предпочитаю передавать имена перечислений в значения, делает вещи более надежными).
Должен признаться, что я никогда не пробовал его в списке перечислений, хотя я не знаю, что бы с этим делать - может быть стоит попробовать.
var jsonFormatter = config.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter { CamelCaseText = true });