Дополнительные свойства NJsonSchema, сгенерированные схемой, используют проверку oneOf

Когда NJsonSchema генерирует схему json из типа C#, содержащего свойство, декорированное атрибутом JsonExtensionDataAttribute, результирующая схема json устанавливает дополнительные свойства как

Это не проходит проверку схемы, когда у меня есть смесь строковых и нулевых дополнительных значений свойств в моих исходных данных json. Вот пошаговый пример

У меня есть сгенерированная модель C#

Затем я генерирую схему json на основе этой модели, используя следующий code C#

Что приводит к следующей схеме

Мы используем вышеизложенное для проверки данных json, содержащих дополнительные свойства, которые могут быть строкой или нулем, например

Проверка схемы завершается неудачей со следующим сообщением

JSON действителен для нескольких схем из 'oneOf'. Допустимые индексы схемы: 0, 1. Путь: #/definitions/Model/additionalProperties/oneOf

Это так задумано? Не могу ли я иметь комбинацию строковых и пустых дополнительных свойств?

    "additionalProperties": {
        "oneOf": [
          {},
          {
            "type": "null"
          }
        ]
      }
namespace MyNamespace
{
#pragma warning disable // Disable all warnings

    [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "11.0.2.0 (Newtonsoft.Json v13.0.0.0)")]
    public partial class Model
    {
        [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Always)]
        [System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)]
        public string Id { get; set; }

        private System.Collections.Generic.IDictionary<string, object> _additionalProperties;

        [Newtonsoft.Json.JsonExtensionData]
        public System.Collections.Generic.IDictionary<string, object> AdditionalProperties
        {
            get { return _additionalProperties ?? (_additionalProperties = new System.Collections.Generic.Dictionary<string, object>()); }
            set { _additionalProperties = value; }
        }
    }

    [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "11.0.2.0 (Newtonsoft.Json v13.0.0.0)")]
    public partial class Example
    {
        [Newtonsoft.Json.JsonProperty("data", Required = Newtonsoft.Json.Required.Always)]
        [System.ComponentModel.DataAnnotations.Required]
        public Model Data { get; set; } = new Model();
    }
}
var schema = JsonSchema.FromType<Example>();
var generatedSchema = schema.ToJson();
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Example",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "Data"
  ],
  "properties": {
    "Data": {
      "$ref": "#/definitions/Model"
    }
  },
  "definitions": {
    "Model": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          {},
          {
            "type": "null"
          }
        ]
      },
      "required": [
        "Id"
      ],
      "properties": {
        "Id": {
          "type": "string"
        },
        "AdditionalProperties": {
          "type": [
            "null",
            "object"
          ],
          "additionalProperties": {}
        }
      }
    }
  }
}
{
    "Data": {
        "Id": "82829d29",
        "SomeAdditionalProperty": "text",
        "SomeOtherAdditionalProperty": null
    }
}
Фаина
Вопрос задан15 июля 2024 г.

1 Ответ

2
Жанна
Ответ получен16 сентября 2024 г.

Ваш ответ

Загрузить файл.