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

.NET Core项目中如何让Swagger将类的string属性识别为字符串数组?

在.NET Core中修改Swagger模型里的属性类型

针对需求——让Swagger模型定义中MyClass的Items属性显示为字符串数组而非字符串,有以下几种可行方案:

方案一:使用Swashbuckle的[SwaggerSchema]特性

这是最直接的方式,只需给目标属性添加特性指定类型即可:

  1. 确保项目已安装Swashbuckle.AspNetCore NuGet包
  2. 修改类定义:
using Swashbuckle.AspNetCore.Annotations;

public class MyClass
{
    [SwaggerSchema(DataType = "array", ItemType = "string")]
    public string Items { get; set; }
}

重新生成项目后,Swagger文档里的Items就会被标记为字符串数组类型。

方案二:自定义Schema过滤器

如果需要批量处理多个类或属性,或者有更复杂的逻辑控制,可以通过实现ISchemaFilter来修改Swagger的Schema定义:

  1. 创建自定义过滤器类:
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;

public class CustomSchemaFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        // 定位到目标类和属性
        if (context.Type == typeof(MyClass) && schema.Properties.TryGetValue("Items", out var itemsSchema))
        {
            // 修改为数组类型,元素类型为字符串
            itemsSchema.Type = "array";
            itemsSchema.Items = new OpenApiSchema { Type = "string" };
            // 清除原字符串类型的格式设置
            itemsSchema.Format = null;
        }
    }
}
  1. 在Swagger配置中注册过滤器(以.NET 6+的Program.cs为例):
builder.Services.AddSwaggerGen(options =>
{
    options.SchemaFilter<CustomSchemaFilter>();
});

方案三:配合JSON序列化转换器(需修改属性类型)

如果不仅要Swagger显示为数组,实际接口的序列化/反序列化也需要将字符串(比如逗号分隔的字符串)和数组互相转换,可以修改属性类型并添加JSON转换器:

  1. 实现自定义JSON转换器:
using System.Text.Json;
using System.Text.Json.Serialization;

public class StringToArrayConverter : JsonConverter<string[]>
{
    public override string[] Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        var strValue = reader.GetString();
        return string.IsNullOrWhiteSpace(strValue) ? Array.Empty<string>() : strValue.Split(',');
    }

    public override void Write(Utf8JsonWriter writer, string[] value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(string.Join(',', value));
    }
}
  1. 修改类的属性类型并添加转换器:
public class MyClass
{
    [JsonConverter(typeof(StringToArrayConverter))]
    public string[] Items { get; set; }
}

这种方式下Swagger会自动识别属性的数组类型,同时兼顾实际的序列化逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:42:22