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

使用NewtonSoft JsonSchema解析Draft-07 Schema时遇数组转布尔值异常

搞定Newtonsoft.Json.Schema解析Draft-07 Schema时的"Can not convert Array to Boolean"异常

问题根因分析

你碰到的这个情况挺常见的:在线验证工具能完美处理你的Draft-07 Schema,但本地用JsonSchema.Parse()就抛出ArgumentException说“不能把数组转成布尔值”。主要原因大概率是Newtonsoft.Json.Schema版本对Draft-07的支持不到位,或者本地Schema文件可能存在隐形的格式问题。

先核对下你用的包版本——旧版的Newtonsoft.Json.Schema对Draft-07的兼容做得不够好,有些关键字的解析逻辑会出现类型转换错误。另外也得确认本地的schema.txt和你贴出来的Schema完全一致,有时候文件编码、多余的空格换行也可能搞出问题,但从你给的Schema内容看,结构是完全符合Draft-07规范的。

一步步解决问题

1. 先把包更到最新版

Newtonsoft.Json.Schema后续版本补全了Draft-07的支持,所以第一步务必升级到最新稳定版:

  • 用NuGet包管理器搜索Newtonsoft.Json.Schema,直接点更新;
  • 或者在Package Manager Console里敲:
Install-Package Newtonsoft.Json.Schema -Version latest

2. 解析时显式指定Draft版本

有时候解析器自动推断版本会出错,咱们直接在解析时指定用Draft-07:

string schemaJson = File.ReadAllText(@"c:\temp\schema.txt");
var settings = new JsonSchemaSettings
{
    SchemaVersion = SchemaVersion.Draft7
};
JsonSchema schema = JsonSchema.Parse(schemaJson, settings);

3. 检查本地Schema文件的完整性

确保schema.txt的内容和你提供的Draft-07 Schema一字不差:

  • 看看有没有多打逗号、缺括号的情况;
  • 文件编码选UTF-8(无BOM),避免解析时出现字符乱码干扰。

4. 测试验证逻辑是否正常

解析成功后,你可以用这段代码测试下,和在线工具的结果对比:

// 你的无效JSON示例
string invalidJson = @"{ ""checked"": ""false"", ""dimensions"": { ""width"": 5, ""height"": 10 }, ""id"": 1, ""name"": ""A green door"", ""price"": 12.5, ""tags"": [ ""home"", ""green"" ] }";
JObject json = JObject.Parse(invalidJson);
IList<string> errors = schema.Validate(json);

// 输出验证错误
foreach (string error in errors)
{
    Console.WriteLine(error);
}

正常情况下,这段代码会输出"checked" must be a boolean之类的错误,和在线工具的结果一致。

为啥在线工具没问题?

像你用的这类在线验证工具,大多用的是Ajv这类更新的Schema验证库,对Draft-07的支持更全面。而旧版Newtonsoft.Json.Schema在处理Draft-07的某些关键字时存在bug,升级包之后这类类型转换的异常就会消失。

内容的提问来源于stack exchange,提问作者Peter Morris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:42:42