You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Json.NET Schema未按Schema规则正确校验JSON数据问题排查

Json.NET Schema 校验全过问题排查与修复

核心问题原因

  • Schema版本与使用的关键字不兼容
    你两份Schema都声明使用draft-04规范,但用到了高版本才支持的关键字:
    • const是JSON Schema draft-06才新增的关键字
    • if/then/else是JSON Schema draft-07才正式支持的关键字
      按照JSON Schema规范,校验器遇到当前版本不认识的关键字会直接忽略,不执行对应校验逻辑。部分在线校验工具默认做了跨版本兼容,所以能正常出结果,但Json.NET Schema会严格按照你声明的$schema版本解析规则,未知关键字全部跳过,最终就会出现无论输入什么都判定通过的情况。
  • Schema和测试JSON存在语法缺陷
    你贴出来的Schema、测试JSON片段都缺少最外层的开头大括号{,如果代码中直接使用这段片段加载Schema,会出现JSON解析失败。如果你的代码没有捕获Schema加载阶段的异常,后续校验逻辑会直接跳过,默认返回通过结果。
  • if/then/else逻辑编写错误
    你写的条件规则里加了"else": false,这个配置的含义是:只要不满足if的匹配条件,就直接判定校验失败。比如当输入type为text时,匹配不到radio/dropdown的if分支,就会触发else规则直接报错,完全不符合你按type校验必填字段的预期,这也是你第二份Schema在在线工具里校验异常的原因之一。

修复步骤

  1. 调整Schema版本声明:如果要使用const、if/then/else关键字,把$schema字段修改为draft-07及以上版本,即替换为"$schema": "http://json-schema.org/draft-07/schema#"。
  2. 修正条件校验逻辑:删除所有else: false配置,if/then规则只需要声明「当if条件匹配时,必须满足then里的要求」即可,不匹配的分支不需要额外配置,不会触发错误。
  3. 补全Schema和测试JSON的语法:确保所有JSON结构完整,外层大括号、括号配对正确,加载Schema时增加异常捕获,确认Schema成功解析后再执行校验。
  4. 检查.NET侧校验代码:确认调用校验方法后正确读取了校验结果和错误集合,不要出现调用了校验方法但未判断返回值、默认走通过分支的低级错误。
  5. 如果必须兼容draft-04版本,把所有const替换为单值的enum(比如"const": "file"改为"enum": ["file"]),同时完全移除if/then/else写法,仅使用oneOf、allOf这类draft-04原生支持的组合关键字实现条件必填规则。

内容的提问来源于stack exchange,提问作者Emanuel Ioan Radu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:18:23