模型中使用 JToken 时 Swagger Schema 自引用

Nit*_*hya 1 swagger .net-core swashbuckle

我的 API 模型有一个类似于 JArray 类型的属性

public class MyModel
{
   public JArray Credentials { get; set; }
   public string Property1 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

对于 Credentials Swagger 生成类似

"credentials": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JToken"
            },
            "nullable": true
          }


Run Code Online (Sandbox Code Playgroud)

模式就像

 "JToken": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/JToken"
        }
      }
Run Code Online (Sandbox Code Playgroud)

这里JToken是自引用的,如何避免这种自引用呢?

Nit*_*hya 5

在生成 Swagger 文档时映射 JToken 的类型,如下所示解决了自引用问题

services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
                c.MapType<JToken>(() => new OpenApiSchema { Type = typeof(JToken).Name });
            });
Run Code Online (Sandbox Code Playgroud)

  • 我花了 3 个小时才找到这个解决方案,StackOverflow 错误非常普遍,可以理解 JToken 引用是问题所在。太感谢了 (2认同)