根据 JSON Schema 的文档,“items”的值必须是子模式的有效 JSON Schema 本身,而在 Newtonsoft.Json.Schema 包中,
Items
表示为 的列表JSchema
。
我正在使用来自 tryAGI 的 Anthropic 库,它们将其表示为
OpenApiSchema
,它与 JSON 模式的定义一致。
public OpenApiSchema? Items { get; set; }
我正在使用 AutoMapper 将我的
JSchema
映射到 OpenApiSchema
,但它失败了,因为 Newtonsoft.Json.Schema
中的属性是 List
。
JSchemaGenerator generator = new JSchemaGenerator();
JSchema schema = generator.Generate(typeof(Person));
var openApiSchema = _mapper.Map<OpenApiSchema>(schema);
为什么
Items
属性在 List
中反映为 Newtonsoft.Json.Schema
,而它本身应该是 JSchema
,不是吗?
这里有几件事......
items
只能是有效的 JSON Schema、{}
或 true
。这在最新的草案中进行了更新,并为模式列表引入了新的关键字 prefixItems
items
可以是 JSON 模式 Draft-04 - Draft-2019-09 中的对象或数组。 Newtonsoft 应该支持两者,(我不确定他们是否支持,尽管如果他们不支持我会感到非常惊讶)
items
作为列表在 OpenAPI 3.0.x 中无效
OpenApiSchema,与 JSON Schema 的定义一致。这并不完全准确。 OAS 架构是 JSON 架构草案 04 规范的子集和超集。 OAS 架构不支持 JSON 架构架构中的所有关键字。例如
items
以下属性取自 JSON Schema 定义,但是 它们的定义已调整为 OpenAPI 规范。
type - 值必须是字符串。不支持通过数组的多种类型。
- allOf - 内联或引用架构必须是架构对象,而不是标准 JSON 架构。
- oneOf - 内联或引用架构必须是架构对象,而不是标准 JSON 架构。
- anyOf - 内联或引用架构必须是架构对象,而不是标准 JSON 架构。
- 不是 - 内联或引用架构必须是架构对象,而不是标准 JSON 架构。
- items - 值必须是对象而不是数组。内联或引用模式必须是模式对象,而不是标准 JSON 架构。如果类型是数组,则必须存在项目。
- properties - 属性定义必须是架构对象,而不是标准 JSON 架构(内联或引用)。
- additionalProperties - 值可以是布尔值或对象。内联或引用模式必须是模式对象,而不是标准 JSON 架构。与 JSON Schema 一致,additionalProperties 默认为 是的。
- 描述 - [CommonMark] 语法可用于富文本表示。
- 格式 - 有关更多详细信息,请参阅数据类型格式。在依赖 JSON Schema 定义的格式的同时,OAS 还提供了一些额外的功能 预定义格式。
- default - 默认值表示输入的使用者将假设为模式的值(如果不是) 假如。与 JSON Schema 不同,该值必须符合定义的 在同一级别定义的模式对象的类型。例如,如果 type 是 string,那么默认可以是“foo”但不能是 1。