У меня проблема с использованием Newtonsoft.Json.Schema NuGet (версия 3.0.11) с моим приложением «Редактор настроек». GUI получает список файлов настроек (сериализованных как json) и схемы json для каждого типа файла настроек. Теперь пользователь может редактировать файлы настроек, которые затем проверяются по схеме для соответствующего файла.
Я (де) сериализую все настройки, относящиеся к моим приложениям, используя TypeNameHandling = TypeNameHandling.All
, поскольку в конкретном файле настроек могут быть унаследованные типы, расположенные в конкретном файле настроек. .
Я генерирую схему JSON в своем классе настроек, используя NewtonSoft.Json.Schema, как это:
new JSchemaGenerator().Generate(setting.GetType())
Когда я пытаюсь проверить редактируемую строку в реальном времени по ранее сгенерированной схеме, я получаю следующую ValidationError в строке ListOfItems
-property:
Недопустимый тип. Ожидаемый массив, нулевой, но получил объект.
JSON сериализованного списка выглядит так:
{
...
"ListOfItems": {
"$type": "System.Collections.Generic.List`1[[MySubSettingsClass, MyAssembly]], mscorlib",
"$values": [
{
"$type": "MySubSettingsClass, MyAssembly",
...
}]
}
}
Схема выглядит так:
"ListOfItems": {
"type": [
"array",
"null"
],
"items": {
"$ref": "#/definitions/MySubSettingsClass"
}
},
Каким-то образом проверка схемы не может интерпретировать тип списка как массив.
Я уже пытался заменить свой список массивом этих поднаборов, но это выдает мне ту же ошибку:
{
"$type": "MySettingsClass, MyAssembly",
"ListOfItems": {
"$type": "MySubSettingsClass[], MyAssembly",
"$values": [
{
...
}
}
}
Могу ли я решить эту проблему, используя некоторые атрибуты над списком-свойством?