如何合并多个NewtonSoft生成的Json schema为统一超集schema
合并多个Newtonsoft生成的JSchema的实现方案
核心实现依赖JSON Schema标准中的allOf关键字,该关键字的作用就是要求待校验数据必须同时满足数组内所有子schema的规则,刚好匹配你的需求。
实现步骤
- 第一步:生成所有类对应的独立JSchema
先把所有需要参与校验的类对应的schema批量生成,存入集合:
// 初始化schema生成器 JSchemaGenerator generator = new JSchemaGenerator(); // 逐个生成对应类的schema并存入集合 List<JSchema> allClassSchemas = new List<JSchema> { generator.Generate(typeof(ClassA)), generator.Generate(typeof(ClassB)), generator.Generate(typeof(ClassC)) // 你需要的其他类依次添加即可 };
- 第二步:构建合并后的超集schema
直接创建新的JSchema对象,将上面的集合赋值给它的AllOf属性即可完成合并:
JSchema mergedSuperSchema = new JSchema { AllOf = allClassSchemas };
- 第三步:校验逻辑直接复用
后续校验流程无需调整,直接用生成的mergedSuperSchema校验目标JSON文件即可,校验时会自动检查JSON是否符合所有类对应的schema规则。
注意事项
- 如果多个类存在同名属性,规则会自动叠加校验:比如ClassA定义
Name为长度≥3的字符串,ClassB定义Name为长度≤10的字符串,合并后规则会自动生效为Name必须是长度3~10的字符串 - 如果类之间存在嵌套引用关系,生成器会自动处理
$ref引用,不会生成冗余重复规则
内容的提问来源于stack exchange,提问作者JockyMac
相关产品推荐
相关产品推荐

