为了能够反序列化多态类型,我在许多JSON对象中使用了类型鉴别器。例如,{ "$type": "SomeType", "otherProperties": "..." }
对于具体类型的JSON模式,我为类型指定了一个常量值。
{
"type": "object",
"properties": {
"$type": { "const": "SomeType" },
"otherProperties": { "type": "string" }
}
}
这是有效的,但将选择的"$类型";属性名称贯穿许多不同的JSON模式。事实上,我们正在考虑将其重命名为"__类型";与BSON打得更好。
我能阻止在所有受影响的架构中重命名此属性吗?
我试着从其他地方搜索加载属性名称的方法。据我所知,$ref
只适用于属性值。
JSON模式无法像您所要求的那样从其他位置动态加载键值。特别是因为值会不同,并且您只希望从其他地方加载密钥。
虽然使用JSONSchema无法做到这一点,但可以使用Jsonnet之类的模板工具。我亲眼目睹了这项大规模的工作。
这需要你有一个预处理步骤,但听起来这是你已经在计划的事情,创建某种管道来生成你的模式。
警告一下,注意现有的模式生成工具。它通常只适用于脚手架,需要大量修改。听起来你正在建立自己的,这可能是一个更好的方法。