C# Web API中不使用Newtonsoft.Json.Schema验证JSON Schema及报错解决
解决NJsonSchema验证JSON时的类型转换错误
你遇到的错误是因为沿用了Newtonsoft.Json.Schema的调用逻辑,但NJsonSchema有独立的API体系,不能直接用JObject调用Validate方法传递JToken参数。以下是正确的实现步骤:
步骤1:安装正确的NuGet包
确保安装适配Newtonsoft.Json的NJsonSchema包:
Install-Package NJsonSchema.NewtonsoftJson
步骤2:正确加载JSON Schema
不要用JObject.Parse加载Schema,改用NJsonSchema的专用方法:
// 从字符串加载Schema var jsonSchema = JsonSchema.Parse(schemafile); // 若从文件加载,可使用异步方法 // var jsonSchema = await JsonSchema.FromFileAsync("schema.json");
步骤3:执行JSON验证
使用NJsonSchema的JsonSchemaValidator类完成验证,示例代码:
JToken json = JToken.Parse(value); // 待验证的JSON值 var validator = new JsonSchemaValidator(); // 执行验证,返回错误列表 var validationErrors = validator.Validate(json, jsonSchema); // 处理验证结果 if (validationErrors.Count > 0) { foreach (var error in validationErrors) { Console.WriteLine($"错误:{error.Message},路径:{error.Path}"); } } else { Console.WriteLine("JSON完全符合Schema规则"); }
关键说明
- NJsonSchema的验证结果是
List<ValidationError>类型,包含错误信息和对应JSON路径,需替换原Newtonsoft.Json.Schema的结果处理逻辑。 - 若项目使用System.Text.Json而非Newtonsoft.Json,需安装
NJsonSchema包而非NJsonSchema.NewtonsoftJson,并调整JSON解析方式为JsonDocument.Parse。
内容的提问来源于stack exchange,提问作者learningdotnet
相关产品推荐
相关产品推荐

