You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6中Swagger如何将枚举显示为字符串?

.NET 6中让Swagger枚举以字符串形式展示的解决方法

方法一:通过SwaggerGen直接配置枚举Schema

在配置SwaggerGen时,直接指定枚举类型的Schema为字符串格式,覆盖默认的整数展示逻辑:

builder.Services.AddSwaggerGen(options =>
{
    // 全局配置所有枚举以字符串展示
    options.MapType<Enum>(() => new OpenApiSchema
    {
        Type = "string",
        Enum = Enum.GetValues(typeof(Enum))
            .Cast<Enum>()
            .Select(e => new OpenApiString(e.ToString()))
            .ToList<IOpenApiAny>()
    });

    // 若只需针对特定枚举配置,替换为以下代码
    // options.MapType<YourTargetEnum>(() => new OpenApiSchema
    // {
    //     Type = "string",
    //     Enum = Enum.GetValues(typeof(YourTargetEnum))
    //         .Cast<YourTargetEnum>()
    //         .Select(e => new OpenApiString(e.ToString()))
    //         .ToList<IOpenApiAny>()
    // });
});

方法二:结合Json序列化配置与Swagger Schema过滤器

仅添加JsonStringEnumConverter只会影响接口的序列化逻辑,不会同步修改Swagger文档的展示,需配合Schema过滤器实现文档层面的字符串枚举展示:

  1. 先配置Json序列化:
builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
    });
  1. 创建自定义Schema过滤器:
public class EnumSchemaFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        if (context.Type.IsEnum)
        {
            schema.Type = "string";
            schema.Enum.Clear();
            Enum.GetNames(context.Type)
                .ToList()
                .ForEach(name => schema.Enum.Add(new OpenApiString(name)));
        }
    }
}
  1. 在SwaggerGen中注册过滤器:
builder.Services.AddSwaggerGen(options =>
{
    options.SchemaFilter<EnumSchemaFilter>();
});

方法三:特性标记单个枚举

如果仅需特定枚举以字符串展示,可直接给枚举类添加序列化特性,再配合上述Swagger配置即可生效:

[JsonConverter(typeof(JsonStringEnumConverter))]
public enum YourBusinessEnum
{
    OrderPending,
    OrderPaid,
    OrderCompleted
}

内容的提问来源于stack exchange,提问作者Tenio Hristov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:15:48