Swagger无法验证递归DTO数据,如何解决children字段识别异常?
解决Swagger误将DTO的children字段识别为字符串数组的问题
针对你定义的BasketItems自引用DTO,Swagger错误识别Children字段类型的问题,可通过以下步骤解决:
启用XML文档注释并配置Swagger读取
Swagger需要XML注释来正确解析复杂类型。先在项目属性的「生成」选项卡中勾选「生成XML文档文件」,然后在Swagger配置中引入该文件:builder.Services.AddSwaggerGen(c => { var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath); });给Children属性添加显式类型注释
在Children属性上添加XML注释,明确指定其类型,帮助Swagger识别正确的列表元素类型:/// <summary> /// 子项集合,元素类型为BasketItems /// </summary> [JsonPropertyName("children")] public List<BasketItems> Children { get; set; } = new List<BasketItems>();检查全局序列化配置
若使用System.Text.Json,确保没有全局配置错误地将对象序列化为字符串。避免类似错误配置:builder.Services.AddControllers() .AddJsonOptions(options => { // 不要添加强制将对象转为字符串的配置 });同时确认
BasketItemType枚举的序列化配置正常,枚举解析异常也可能影响Swagger对整个类的识别。清理缓存并重编译
清理项目的bin和obj文件夹,重新编译项目后启动,刷新Swagger页面查看类型是否正确识别。
内容的提问来源于stack exchange,提问作者Saleh Rezaei
相关产品推荐
相关产品推荐

