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

Вы можете сериализовать поле перечисления 9X_asp.net-web-api в модели WebAPI в виде строки, добавив атрибут:

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

Это 9X_c-sharp будет сериализовано в этот JSON:

{ "Size": "Medium" } 

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

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

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

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

64
0
2
Общее количество ответов: 2

Ответ #1

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

Вам необходимо использовать свойство JsonPropertyAttribute.ItemConverterType:

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

9X_asp.net-web-api

119
2

  • как я мог сделать это с помощью `[EnumMember (Value ="? ")] EMPTY = '?'`, чтобы моя модель (для `[FromBody]`) могла отражать json со свойством, которое представляет собой массив, например ...

Ответ #2

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

У меня есть это в коде запуска моего веб-приложения 9X_newtonsoft для сериализации всех перечислений в строки 9X_asp.net-web-api (я предпочитаю передавать имена перечислений 9X_c#-language в значения, что делает вещи более надежными).

Должен 9X_asp.net-web-api признать, что я никогда не пробовал использовать 9X_visual-c# его в списке перечислений, поэтому я не 9X_asp.net-web-api знаю, что он с этим будет делать - возможно, стоит 9X_visual-c# попробовать.

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

15
0