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

如何用Swashbuckle创建Swagger示例展示属性支持多类型

解决Swagger中Dictionary<string, object>示例仅显示字符串的问题

针对你遇到的Dictionary<string, object>类型属性在Swagger中仅显示字符串示例的问题,可以通过自定义Swashbuckle Schema过滤器来强制修改OpenAPI Schema定义,实现展示多种类型值的示例。

方法步骤

1. 创建自定义SchemaFilter类

这个过滤器会专门处理目标属性,替换默认的示例为包含字符串、数字、布尔值的结构:

using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Collections.Generic;

public class DictionaryObjectSchemaFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        // 仅针对RequestBody类的Properties属性(可按需调整范围)
        if (context.MemberInfo?.Name == nameof(RequestBody.Properties) && 
            context.Type == typeof(Dictionary<string, object>))
        {
            // 覆盖默认的Schema定义
            schema.Type = "object";
            schema.Properties = new Dictionary<string, OpenApiSchema>
            {
                ["additionalProp1"] = new OpenApiSchema 
                { 
                    Type = "string", 
                    Example = new OpenApiString("string") 
                },
                ["additionalProp2"] = new OpenApiSchema 
                { 
                    Type = "integer", 
                    Format = "int32", 
                    Example = new OpenApiInteger(123) 
                },
                ["additionalProp3"] = new OpenApiSchema 
                { 
                    Type = "boolean", 
                    Example = new OpenApiBoolean(true) 
                }
            };
            // 移除默认的additionalProperties设置,避免冲突
            schema.AdditionalProperties = null;
        }
    }
}

2. 注册SchemaFilter到Swagger服务

在Program.cs(或Startup.cs)的Swagger配置中添加这个过滤器:

builder.Services.AddSwaggerGen(c =>
{
    // 注册自定义Schema过滤器
    c.SchemaFilter<DictionaryObjectSchemaFilter>();
    
    // 你的其他Swagger配置(比如文档信息、注释路径等)
});

原理说明

Swashbuckle默认会将Dictionary<string, object>推断为"additionalProperties为string类型"的结构,这是框架对object类型的默认处理逻辑导致的。通过自定义SchemaFilter,我们可以直接修改生成的OpenAPI Schema,强制指定属性的类型和示例值,从而达到展示多种类型的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:55:23