Невозможно проанализировать схему JSON и разрешить ссылку - PullRequest
0 голосов
/ 04 июля 2018

У меня одна схема JSON с исх. Я пытаюсь разрешить все ссылки, используя JsonSchemaResolver. Но, к сожалению, ссылка не разрешена и появляется ошибка, как показано ниже.

Я пытаюсь получить замещенный 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)

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

JsonSchemaResolver больше не поддерживается. Попробуйте ниже и используйте Newtonsoft.Json.Schema NuGet

var schemaFileContents = File.ReadAllText(schemaFileName);
JSchemaPreloadedResolver resolver = new JSchemaPreloadedResolver();
var result = JSchema.Parse(schemaFileContents, resolver);
Console.WriteLine(result);       
0 голосов
/ 04 июля 2018

Похоже, вы используете json schema V4, но JsonSchemaResolver ожидает json schema V3. Разница между ними заключается в required поле. Попробуйте использовать его на уровне свойств со значением bool вместо значения массива на более высоком уровне:

"address": {
    "title": "Address",
    "type": "string",
    "required": true
}

Согласно документы JsonSchemaResolver устарели. Чтобы использовать схему json с последними стандартами, вам нужно использовать отдельный пакет . Используйте JSchemaPreloadedResolver, см. Пример здесь

...