Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 使用官方Swagger API模式验证Swagger API声明_Json_Json.net_Swagger - Fatal编程技术网

Json 使用官方Swagger API模式验证Swagger API声明

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

swagger规范存储库提供了一个描述有效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的错误,还是我只是做错了什么?

根据文档,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合并到主分支中。