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

.NET 9访问/openapi/v1.json触发JsonReaderException深度超限问题

解决.NET 9中OpenAPI端点JSON深度超出限制的问题

问题根源

你配置的Microsoft.AspNetCore.Http.Json.JsonOptions仅作用于ASP.NET Core的HTTP请求/响应JSON序列化流程,而Swagger生成OpenAPI文档时使用的是独立的Json序列化配置,因此该设置不会生效,仍会触发默认的64层深度限制。

解决方案

1. 配置Swagger专属的Json序列化选项

针对Swagger生成文档的过程,直接在SwaggerGenOptions中配置Json参数:

builder.Services.AddSwaggerGen(options =>
{
    // 配置Swagger使用的Json序列化规则
    options.JsonSerializerOptions.MaxDepth = 12800;
    options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
    options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
});

2. 复用全局Json配置(可选)

若希望统一HTTP和Swagger的Json规则,可先定义全局配置再复用:

var globalJsonOptions = new JsonSerializerOptions
{
    ReferenceHandler = ReferenceHandler.IgnoreCycles,
    MaxDepth = 12800,
    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
};

// 配置HTTP Json选项
builder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>(options =>
{
    options.SerializerOptions.Merge(globalJsonOptions);
});

// 让Swagger复用全局配置
builder.Services.AddSwaggerGen(options =>
{
    options.JsonSerializerOptions.Merge(globalJsonOptions);
});

3. 优化模型结构

即使设置了深度限制,过度嵌套的模型仍可能引发问题,可尝试:

  • 用[SwaggerIgnore]标记OpenAPI文档中不需要展示的属性
  • 为复杂模型创建扁平化的DTO,减少嵌套层级
  • 检查是否存在隐性循环引用(如父模型包含子模型,子模型又反向引用父模型)

4. 验证Swagger包版本

确保使用的Swashbuckle.AspNetCore包版本兼容.NET 9(建议6.4.0及以上),避免版本不匹配导致配置失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:45:58