Json 使用官方Swagger API模式验证Swagger API声明
swagger规范存储库提供了一个描述有效swagger 2.0 API定义的示例。 我想使用这个模式来验证给定的API定义文件是否有效,然后再尝试解释它。 我使用以下代码使用Json.NET加载模式:Json 使用官方Swagger API模式验证Swagger API声明,json,json.net,swagger,Json,Json.net,Swagger,swagger规范存储库提供了一个描述有效swagger 2.0 API定义的示例。 我想使用这个模式来验证给定的API定义文件是否有效,然后再尝试解释它。 我使用以下代码使用Json.NET加载模式: JsonSchema swaggerApiSchema; using (var textReader = new JsonTextReader(new StreamReader(@"C:\path\to\schema.json"))) { swaggerApiSchema = JsonS
JsonSchema swaggerApiSchema;
using (var textReader = new JsonTextReader(new StreamReader(@"C:\path\to\schema.json")))
{
swaggerApiSchema = JsonSchema.Read(textReader);
}
这会引发ArgumentException报告“无法将数组转换为布尔值”
模式文件是否有问题,这是Json.NET的错误,还是我只是做错了什么?根据文档,Json.NET实现了Json模式草案3。更多但是您发布的招摇过市模式是根据JSON模式草案4创建的。JSON模式草案3和草案4之间的一个区别是required属性,在JSON模式草案3中,它是properties中subschemas的属性。在JSON模式中,Draft4是一个一级关键字,扮演着相同的角色,并且有一个字符串数组作为参数 JSON模式草案3示例:
{
"properties": {
"Id": {
"required": true,
"type": "integer"
},
"FirstName": {
"required": true,
"type": "string",
},
"LastName": {
"required": true,
"type": "string
}
}
}
{
"properties": {
"Id": {
"type": "integer"
},
"FirstName": {
"type": "string"
},
"LastName": {
"type": "string"
}
},
"required": [ "Id", "FirstName", "LastName" ]
}
JSON模式草案4示例:
{
"properties": {
"Id": {
"required": true,
"type": "integer"
},
"FirstName": {
"required": true,
"type": "string",
},
"LastName": {
"required": true,
"type": "string
}
}
}
{
"properties": {
"Id": {
"type": "integer"
},
"FirstName": {
"type": "string"
},
"LastName": {
"type": "string"
}
},
"required": [ "Id", "FirstName", "LastName" ]
}
请注意这两种模式在定义所需属性方面的差异。这就是为什么会出现错误:“无法将数组转换为布尔值。”
下面是导致错误的Swagger JSON模式中required属性的第一次出现:
"required": [ "swagger", "info", "paths" ]
我建议使用实现JSON模式草案4的解析器进行验证。谢谢您的回答!您对我可以用于验证的解析器有什么建议吗?我目前正在使用Newtonsoft Json库的一个分支进行测试。我们仍在等待JameNK解决合并冲突,以便将模式v4合并到主分支中。