同一文件中的多个模式

时间:2014-03-19 23:12:32

标签: c# json json.net jsonschema

我有两个JSON模式需要共享相当多的通用定义。我会喜欢通过引用用一组外部文件来做这件事,但我似乎无法获得最新版本的Json.NET(6.0.1)来加载外部引用。它可以使用通用的解析器加载外部加载的模式,但是它不能处理形式的“#OtherStherma#somePath / to / definition"”的URI。它试图找到具有该确切id的模式,完全忽略了"#"在中间。这是从Json Schema draft 3(Json.NET应该支持的版本)开始的有效URI引用。

所以我的工作是使用" items"将两个模式放在同一个文件中。模式的集合。所以我会有这样的事情:

{
"id": "ourSchema",
"$schema": "http://json-schema.org/draft-03/schema",    

"items": [
    {
        "title": "Schema1",
        "type": "object",
        ...
    },
    {
        "title": "Schema2",
        "type": "object",
        ...
    }
 ]
 ...

这可以正常工作和解析,子模式找到正确的$ ref定义,并且所有内容都会加载。但是当我尝试使用items集合中的一个模式进行验证时,即使它显然无效,一切都会通过。代码如下所示:

var reader = new JsonValidatingReader(new JsonTextReader(new StreamReader(stream))) {Schema = mySchema.Items[0]};
reader.ValidationEventHandler += (o, e) => errors.Add(e.Message);
_object = JObject.Load(reader);

我使用此功能是否错误?这是Json.NET中的错误吗?在这一点上,我很想让Json.NET正确地尊重外部引用并提交拉取请求,因为这是解决问题的真正方法。我只是试图让当前的代码工作,所以我可以在同一时间继续处理其他事情。

1 个答案:

答案 0 :(得分:1)

我想出了问题。模式正在完成它应该做的事情,但是Json.NET目前还不支持" oneOf"这是一个草案4结构。这就是问题,因为我正在使用" oneOf"。它并没有加载模式,但它只是忽略了" oneOf"以下的所有内容。