无法解析 JSON 架构并解析引用
Unable to parse JSON Schema and resolve the reference
我有一个 JSON 带有参考的架构。我正在尝试使用 JsonSchemaResolver
解析所有引用。但是,不幸的是,ref 没有得到解决并出现如下错误。
我正在尝试通过解析所有参考来获得替换的 JSON。
代码:
var schemaFileContents = File.ReadAllText(schemaFileName);
JsonSchemaResolver resolver = new JsonSchemaResolver();
var result = JsonSchema.Parse(schemaFileContents, resolver);
Console.WriteLine(result);
JSON 架构:
{
"$schema": "YYYYYYY",
"id": "XXXXXX",
"title": "Current Employee Details",
"description": "XXXXXXXXXXXXX",
"type": "object",
"properties": {
"EMP": {
"title": "Employee ",
"description": "Details of the Employee",
"$ref": "#/definitions/Employee"
}},
"definitions": {
"EmployeeAddress": {
"title": "Address",
"description": "EmployeeAddress - Present Address",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"EmployeeAddress"
]
},
"address": {
"title": "Address",
"type": "string"
},
"postalCode": {
"title": "Postal Code",
"type": "string"
}
},
"required": [
"postalCode",
"address"
]
},
"Employee": {
"title": "Party",
"description": "Employee Details",
"type": "object",
"properties": {
"firstName": {
"title": "First name",
"type": "string"
},
"address": {
"title": "Employee Address",
"$ref": "#/definitions/EmployeeAddress"
}
},
"required": [
"firstName"
]
}
}
}
错误:
Unhandled Exception: System.ArgumentException: Can not convert Array to Boolean.
at Newtonsoft.Json.Linq.JToken.op_Explicit(JToken value)
at Newtonsoft.Json.Schema.JsonSchemaBuilder.ProcessSchemaProperties(JObject schemaObject)
at Newtonsoft.Json.Schema.JsonSchemaBuilder.BuildSchema(JToken token)
at Newtonsoft.Json.Schema.JsonSchemaBuilder.ResolveReferences(JsonSchema schema)
at Newtonsoft.Json.Schema.JsonSchemaBuilder.ResolveReferences(JsonSchema schema)
at Newtonsoft.Json.Schema.JsonSchemaBuilder.Read(JsonReader reader)
at Newtonsoft.Json.Schema.JsonSchema.Read(JsonReader reader, JsonSchemaResolver resolver)
at Newtonsoft.Json.Schema.JsonSchema.Parse(String json, JsonSchemaResolver resolver)
看起来您正在使用 json schema V4
,但 JsonSchemaResolver
需要 json schema V3
。它们之间的区别在于 required
字段。尝试在具有 bool
值的 属性 级别上使用它,而不是更高级别的数组值:
"address": {
"title": "Address",
"type": "string",
"required": true
}
根据docs JsonSchemaResolver
is obsolete. To use json schema with the latest standards you need to use the separate package. Use the JSchemaPreloadedResolver
, see the example here
JsonSchemaResolver 现已弃用。在下面尝试并使用 Newtonsoft.Json.Schema NuGet
var schemaFileContents = File.ReadAllText(schemaFileName);
JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();
var result = JSchema.Parse(schemaFileContents, resolver);
Console.WriteLine(result);
我有一个 JSON 带有参考的架构。我正在尝试使用 JsonSchemaResolver
解析所有引用。但是,不幸的是,ref 没有得到解决并出现如下错误。
我正在尝试通过解析所有参考来获得替换的 JSON。
代码:
var schemaFileContents = File.ReadAllText(schemaFileName);
JsonSchemaResolver resolver = new JsonSchemaResolver();
var result = JsonSchema.Parse(schemaFileContents, resolver);
Console.WriteLine(result);
JSON 架构:
{
"$schema": "YYYYYYY",
"id": "XXXXXX",
"title": "Current Employee Details",
"description": "XXXXXXXXXXXXX",
"type": "object",
"properties": {
"EMP": {
"title": "Employee ",
"description": "Details of the Employee",
"$ref": "#/definitions/Employee"
}},
"definitions": {
"EmployeeAddress": {
"title": "Address",
"description": "EmployeeAddress - Present Address",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"EmployeeAddress"
]
},
"address": {
"title": "Address",
"type": "string"
},
"postalCode": {
"title": "Postal Code",
"type": "string"
}
},
"required": [
"postalCode",
"address"
]
},
"Employee": {
"title": "Party",
"description": "Employee Details",
"type": "object",
"properties": {
"firstName": {
"title": "First name",
"type": "string"
},
"address": {
"title": "Employee Address",
"$ref": "#/definitions/EmployeeAddress"
}
},
"required": [
"firstName"
]
}
}
}
错误:
Unhandled Exception: System.ArgumentException: Can not convert Array to Boolean.
at Newtonsoft.Json.Linq.JToken.op_Explicit(JToken value)
at Newtonsoft.Json.Schema.JsonSchemaBuilder.ProcessSchemaProperties(JObject schemaObject)
at Newtonsoft.Json.Schema.JsonSchemaBuilder.BuildSchema(JToken token)
at Newtonsoft.Json.Schema.JsonSchemaBuilder.ResolveReferences(JsonSchema schema)
at Newtonsoft.Json.Schema.JsonSchemaBuilder.ResolveReferences(JsonSchema schema)
at Newtonsoft.Json.Schema.JsonSchemaBuilder.Read(JsonReader reader)
at Newtonsoft.Json.Schema.JsonSchema.Read(JsonReader reader, JsonSchemaResolver resolver)
at Newtonsoft.Json.Schema.JsonSchema.Parse(String json, JsonSchemaResolver resolver)
看起来您正在使用 json schema V4
,但 JsonSchemaResolver
需要 json schema V3
。它们之间的区别在于 required
字段。尝试在具有 bool
值的 属性 级别上使用它,而不是更高级别的数组值:
"address": {
"title": "Address",
"type": "string",
"required": true
}
根据docs JsonSchemaResolver
is obsolete. To use json schema with the latest standards you need to use the separate package. Use the JSchemaPreloadedResolver
, see the example here
JsonSchemaResolver 现已弃用。在下面尝试并使用 Newtonsoft.Json.Schema NuGet
var schemaFileContents = File.ReadAllText(schemaFileName);
JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();
var result = JSchema.Parse(schemaFileContents, resolver);
Console.WriteLine(result);