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

如何让Swashbuckle生成不含时间的日期类型Swagger属性?

解决Swashbuckle识别自定义DateFormatConverter的问题

我完全懂你的困扰——用NSwag生成的Person类带了自定义的DateFormatConverter,但Swashbuckle生成Swagger契约时,还是把dateOfBirth标记成了date-time格式,而你只想让加了这个转换器的属性显示为date格式,不想全局修改所有DateTime类型。

下面是针对性的解决方案:

步骤1:创建自定义SchemaFilter

我们需要写一个ISchemaFilter实现,专门检查属性上的JsonConverterAttribute,只有当转换器是你的DateFormatConverter时,才修改Swagger schema的格式:

public class DateFormatSchemaFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        // 确保当前处理的是属性
        if (context.MemberInfo is PropertyInfo propertyInfo)
        {
            // 获取属性上的JsonConverter特性
            var converterAttribute = propertyInfo.GetCustomAttribute<JsonConverterAttribute>();
            
            // 判断是否使用了我们自定义的DateFormatConverter
            if (converterAttribute != null && converterAttribute.ConverterType == typeof(DateFormatConverter))
            {
                // 将schema的格式改为date(对应yyyy-MM-dd的日期格式)
                schema.Format = "date";
            }
        }
    }
}

注意:如果你的DateFormatConverter是internal内部类,反射可能无法访问它的类型信息,建议把它改成public,或者在判断时用类型的全名来匹配(比如converterAttribute.ConverterType.FullName == "你的命名空间.DateFormatConverter")。

步骤2:注册SchemaFilter到Swashbuckle

在你的Swagger配置代码里(.NET Core 3.1/5在Startup.cs,.NET 6+在Program.cs),添加这个过滤器:

.NET Core 3.1/5 示例

services.AddSwaggerGen(c =>
{
    // 注册自定义SchemaFilter
    c.SchemaFilter<DateFormatSchemaFilter>();
    
    // 其他Swagger配置(比如文档信息、XML注释等)
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "Your API", Version = "v1" });
});

.NET 6+ 示例

builder.Services.AddSwaggerGen(c =>
{
    c.SchemaFilter<DateFormatSchemaFilter>();
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "Your API", Version = "v1" });
});

效果验证

配置完成后,重新生成Swagger契约,Person的定义会变成你期望的样子:

"Person": {
  "dateOfBirth": {
    "format": "date",
    "type": "string"
  }
}

这个方案只会影响标注了DateFormatConverter的属性,不会全局修改所有DateTime类型的schema,完美符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:27:16