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