如何验证JsonSchema类型属性中的多个$ref?

3
我希望使用一个Json Schema来验证restful web服务上的一些传入Json。但是在模式的type属性中使用多个$ref时,遇到了问题。
我需要能够做到这一点:
"type" : [ {"$ref" : "#myObjectRef"}, {"$ref" : "#otherRef"} ]

即对象必须符合所引用的模式之一。
但是,当我通过JsonSchema.Parse在Json.Net中运行此操作时,我会收到以下错误消息:“异常JSON模式类型字符串令牌,得到数组”。
当尝试使用此Json模式验证TinCan Api语句时,通过Json.Net验证器时,我会得到完全相同的错误。 但是,该json模式在JsonSchema Lint中进行了验证。
Json.Net如何处理模式中具有多个类型选项? 是否有替代的.net库可以进行此验证?

1
顺便问一句,你是否已经在Json.Net上报了一个bug?那显然是一个错误。 - cloudfeet
另外,他们只支持v3,不支持v4吗? - cloudfeet
1个回答

5
在JSON Schema中,type字段必须是字符串或唯一字符串数组。这些字符串可以是JSON原语中的任何一种:
  • array(数组)
  • boolean(布尔型)
  • integer(整数)
  • number(数字)
  • null(空值)
  • object(对象)
  • string(字符串)
您需要使用的是oneOf字段。
{
    "oneOf": [{"$ref": "#myObjectRef"}, {"$ref": "#otherRef"}]
}

这个架构强制对象必须符合两个引用架构中的一个(且仅一个)。如果匹配两个架构也是有效的,则可以使用anyOf

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接