使用newtonsoft.json.schema

时间:2019-02-13 13:01:00

标签: json.net jsonschema

我想访问模式中的定义以便获得定义的命名。我正在使用newtonsoft.json v11.01

我正在为jsonschema构建一个c#转换器,以制作语法树并对其进行编译,以便在运行时获取该对象的类型化版本。

{
  "$id": "https://example.com/arrays.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "xml remarks",
  "type": "object",
  "properties": {
    "fruits": {
      "type": "array",
      "items": {
        "type": "object",
        "title": "fruit",
        "required": ["naam"],
        "properties": {
        "naam": {
          "type": "string",
          "description": "The name of the fruit."
        }
        }
      }
    },
    "vegetables": {
      "type": "array",
      "items": { "$ref": "#/definitions/veggie" }
    }
  },
  "definitions": {
    "veggie": {
      "type": "object",
      "required": [ "veggieName", "veggieLike" ],
      "properties": {
        "veggieName": {
          "type": "string",
          "description": "The name of the vegetable."
        },
        "veggieLike": {
          "type": "boolean",
          "description": "Do I like this vegetable?"
        }
      }
    }
  }
}

在模式中,将创建一个引用,其名称为veggie。在属性蔬菜中使用它作为参考。

Json模式在根对象上包含定义,但在property元素上没有定义。在property元素上,没有任何东西可以指向正确的定义。

我如何找到该属性的正确定义?

1 个答案:

答案 0 :(得分:0)

通常,为了解析json-pointer($ ref是“ uri-reference”,而#之后的部分是“ json-pointer”),您需要有权访问json文档的根。

因此,如果您当前有一个仅获得指向“属性”部分的参数的函数,则需要为该函数提供第二个指向文档根目录的参数。

(当您使用由多个文件组成的架构时,它将变得更加复杂;然后您需要第二个参数来指向所有架构文档的根目录)

这是解释json模式文件的编写软件中最困难的部分之一,特别是如果您的语言/库不支持内置的json-pointer的话-在这种情况下,您需要自己编写