我在我的Settings-Editor应用程序中使用Newtonsoft.Json.Schema NuGet(版本3.0.11)时遇到问题。 GUI会接收每种类型的设置文件的设置文件(序列化为json)和json模式的列表。用户现在可以编辑设置文件,然后根据相应文件的架构对其进行验证。
我使用TypeNameHandling = TypeNameHandling.All
对所有应用程序特定的设置(反序列化),因为特定设置文件中可能存在继承的类型。
我使用这样的NewtonSoft.Json.Schema在我的设置类上生成JSON模式:
new JSchemaGenerator().Generate(setting.GetType())
当我尝试针对先前生成的架构验证实时编辑的字符串时,我在ListOfItems
属性的行上收到以下ValidationError:
无效的类型。预期为Array,为Null但得到了Object。
序列化列表的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": [
{
...
}
}
}
我可以通过使用列表属性上方的某种属性来解决该问题吗?