具有默认值的枚举的 C# Swagger 生成

C# Swagger Generation for enum with default value

我有 api 如下所示:

public Task<IActionResult> GetAsync([FromRoute] string id, [FromQuery] Query select = Query.All)

对于查询,我们只想允许某些属性,如下列在查询枚举中:

    public enum Query
    {
        All,
        Property1,
        Property2
    }

我加了

 services.AddSwaggerGen(c =>{c.DescribeAllEnumsAsStrings();})

in startup.cs,但这对默认值不起作用,我得到以下生成的 swagger,默认值为 0 而不是字符串:

     {
        "name": "selec",
        "in": "query",
        "description": "",
        "required": false,
        "type": "string",
        "default": 0, //NOT SHOWN AS STRING
        "enum": [
          "none",
          "property1",
          "property2"
        ]
      },

如何让默认值显示为字符串?

您的项目会根据应用程序的序列化设置自动反序列化,解决方法是添加更改特定 属性

序列化的标记
[JsonConverter(typeof(StringEnumConverter))]

编辑:在启动时,您可以注入 json 选项以将枚举序列化为字符串,如下所示:

 services.AddMvc().AddJsonOptions(options =>
                {
                    options.SerializerSettings.Converters.Add(new StringEnumConverter(true));
                });