swagger-spec存储库提供了JSON-schema,描述了有效的Swagger 2.0 API定义 . 我想使用此模式,以便在我尝试解释之前验证给定的API定义文件是否有效 . 我正在使用以下代码使用Json.NET加载架构:
JsonSchema swaggerApiSchema;
using (var textReader = new JsonTextReader(new StreamReader(@"C:\path\to\schema.json")))
{
swaggerApiSchema = JsonSchema.Read(textReader);
}
这会抛出ArgumentException报告“无法将数组转换为布尔值” .
架构文件有什么问题,这是Json.NET的一个错误,还是我做错了什么?
1 回答
根据文档,JSON.NET实现了JSON Schema Draft 3.更多here . 但是您发布的Swagger架构是根据JSON Schema Draft 4创建的.JSON Schema草案3和草案4之间的差异之一是必需属性,在JSON Schema Draft 3中属性是子属性的属性 . 在JSON Schema中,Draft 4是一个扮演相同角色的第一级关键字,并且有一个字符串数组作为参数 .
Sample of JSON Schema Draft 3:
Sample of JSON Schema Draft 4:
请注意两个模式的区别,即如何定义必需的属性 . 这就是您收到错误的原因:“无法将Array转换为Boolean . ”
这是Swagger JSON Schema中首次出现必需属性,导致错误:
我建议使用实现JSON Schema Draft 4的解析器进行验证 .