Web Api,如何从HttpResponseMessage返回枚举文本值而不是枚举索引值

Arb*_*æde 4 c# enums asp.net-web-api

我注意到我的Web Api方法返回HttpResponseMessage将枚举值转换为int(值的顺序).但我想返回枚举文本值.

return Request.CreateResponse(HttpStatusCode.OK, new {MyEnum.Someting, MyEnum.Someting2});
Run Code Online (Sandbox Code Playgroud)

我应该为它设置什么?

Art*_*aca 13

如果您要返回并接收数据Json,则可以使用StringEnumConverter.定义这样的模型:

class Output
{
    [JsonProperty(ItemConverterType = typeof(StringEnumConverter))]
    public MyEnum[] Enums { get; set; }
}

public HttpResponseMessage Get()
{
    return Request.CreateResponse(HttpStatusCode.OK, new Output { Enums = new MyEnum[] { MyEnum.Someting, MyEnum.Someting2 } }); ;
}
Run Code Online (Sandbox Code Playgroud)

允许您指示json序列化程序将枚举转换为其名称字符串值.

此外,如果您不想定义输出模型,在您的WebApiConfig.Register(config)方法中,您可以添加此行并且还可以工作:

var jsonFormatter = config.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter());
Run Code Online (Sandbox Code Playgroud)

对于.Net Core Web API使用此:

public void ConfigureServices(IServiceCollection services)
{
  services.AddMvc().AddJsonOptions( op => {
      op.SerializerSettings.Converters.Add(new StringEnumConverter());
  });
Run Code Online (Sandbox Code Playgroud)