为什么`Newtonsoft.Json.Schema`中的`Items`属性被表示为`IList<JSchema>`?

问题描述 投票:0回答:1

根据 JSON Schema 的文档,“items”的值必须是子模式的有效 JSON Schema 本身,而在 Newtonsoft.Json.Schema 包中,

Items
表示为
 的列表JSchema

我正在使用来自 tryAGIAnthropic 库,它们将其表示为

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
,不是吗?

.net json.net jsonschema anthropic
1个回答
0
投票

这里有几件事......

  • 您对 JSON Schema 文档的引用适用于 Draft 2020-12,其中
    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



这是 OpenAPI 规范的全文

以下属性取自 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。
© www.soinside.com 2019 - 2024. All rights reserved.