C# 使用JSON.net将枚举容器序列化为字符串

C# 使用JSON.net将枚举容器序列化为字符串,c#,asp.net-web-api,json.net,C#,Asp.net Web Api,Json.net,通过添加属性,可以将WebAPI模型中的枚举字段序列化为字符串: enum Size { Small, Medium, Large } class Example1 { [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] Size Size { get; set; } } 这将序列化到此JSON: { "Size": "Med

通过添加属性,可以将WebAPI模型中的枚举字段序列化为字符串:

enum Size
{
    Small,
    Medium,
    Large
}

class Example1
{
    [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
    Size Size { get; set; }
}
这将序列化到此JSON:

{
  "Size": "Medium"
}
{
  "Sizes":
  [
    "Medium",
    "Large"
  ]
}
如何对枚举集合实现相同的操作

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

在我的web应用程序的启动代码中,我将所有枚举序列化为字符串(我更喜欢将枚举名称传递给值,这样会使事情更加健壮)

但我必须承认,我从未在枚举列表上尝试过,所以我不知道它会做什么——也许值得一试

var jsonFormatter = config.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter { CamelCaseText = true });
您需要使用以下属性:

class Example2
{
    [JsonProperty (ItemConverterType = typeof(StringEnumConverter))]
    public IList<Size> Sizes { get; set; }
}
类示例2
{
[JsonProperty(ItemConverterType=typeof(StringEnumConverter))]
公共IList大小{get;set;}
}

我可以确认这对枚举列表有效。我的理想解决方案是允许在每个属性的基础上选择加入,但这是可行的,总比没有好。谢谢@Jon Eric Athari的解决方案也很有效,将为您提供所需的每个属性选择。但它似乎对字典不起作用:/因此,如何实际填充
大小
?非常感谢您,我已经在这方面花了一天半的时间,我如何使用
[EnumMember(Value=“?”)EMPTY='?'
,以便我的模型(对于
[FromBody]
)可以使用类似于以下数组的属性来反映json:
['X','?','X']
,产生:
[MyEnum.X,MyEnum.EMPTY,MyEnum.X]