我希望从 .Net 6 中的任何给定 Json 对象动态生成
OpenApiSchema
。我在代码中没有可用的 clr 类型来自动生成 Swashbuckle 使用的 Open API Json,并且需要以编程方式执行此操作,而不是使用单个对象生成器工具。此外,这些 Json 对象会被其他用户频繁更改。我的目标是从给定的 json 负载动态创建 OpenAPI 规范。给定如下所示的随机 Json blob,并使用 C# 生成我自己的 OpenApiSchema
,类似于此方法 https://taerimhan.com/exploring-openapi-extensions-dynamic-schema/。我需要做的主要区别是将结果直接连接到 OpenAPI,以便 swashbuckle 渲染动态地为我提供 schmeas 和属性。查看示例 Json...
{
"id": "123",
"unassumablepropertyname1": {
"id": "456",
"otherprop": null
},
"dynamicproperty": "456",
"somethinguseful": "ABC123"
}
理想的结果是动态生成这样的 OpenAPI V3 规范...
{
"openapi": "3.0.1",
"info": {
"title": "Sample API Capabilities",
"version": "v1"
},
"paths": {
"/api/DataRecord/UpsertDynamicObj12": {
"post": {
"tags": [
"Dynamic Objects"
],
"operationId": "UpsertDynamicExample",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DynamicObj12"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/DynamicObj12"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/DynamicObj12"
}
}
}
},
"responses": {
"200": {
"description": "Success"
}
}
}
}
},
"components": {
"schemas": {
"DynamicObj12": {
"required": [
"id"
],
"type": "object",
"properties": {
"id": {
"type": "string"
},
"dynamicproperty": {
"type": "string"
},
"somethinguseful": {
"type": "string"
},
"unassumablepropertyname1": {
"type": "array",
"items": {
"$ref": "#/components/schemas/UnassumablePropertyName1"
},
"nullable": true
}
},
"additionalProperties": false
},
"UnassumablePropertyName1": {
"required": [
"id"
],
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"otherprop": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}
}
}
}
我查看了以下接近的资源,但我正在寻找 C# 解决方案,以便我可以将 Swashbuckle 用于不同 Json 形状的许多不同对象。
有什么想法吗?
不幸的是,根据我的探索,这是不可能的。 可以在 Swashbuckle 中构建 OpenAPI 的片段,但我不知道如何在您的案例中应用它。
编辑:Swashbuckle 用于静态生成。 您不能使用 Swashbuckle,因为这是使用您想要禁用的 Swashbuckle 的主要原因。 对于我的项目,最简单的方法是使用动态语言来完成它,其中我使用模式作为在不同位置协商的数据(由用户定义)。 请注意,模式是静态的,因此如果在其他地方不同意将其作为数据,您的 API 就会变得困难或无法使用,因为它只是接收者需要解析的字符串。动态 Json 对象没有足够的信息来推断架构及其保存的数据,因此将其用作架构作为数据还不够好。