C# Json.NET模式是否忽略$Schema?

C# Json.NET模式是否忽略$Schema?,c#,json.net,jsonschema,C#,Json.net,Jsonschema,JSON模式草案规范允许使用$Schema关键字“作为JSON模式版本标识符和资源的位置,该资源本身就是JSON模式。”但是,当我尝试验证草案v3和v4支持时,我无法看到正在考虑的$Schema值。作为一个例子,考虑下面的测试夹具。 使用Newtonsoft.Json; 使用Newtonsoft.Json.Linq; 使用Newtonsoft.Json.Schema; 使用NUnit.Framework; 使用System.Collections.Generic; 使用System.IO; 名称

JSON模式草案规范允许使用
$Schema
关键字“作为JSON模式版本标识符和资源的位置,该资源本身就是JSON模式。”但是,当我尝试验证草案v3和v4支持时,我无法看到正在考虑的
$Schema
值。作为一个例子,考虑下面的测试夹具。

使用Newtonsoft.Json;
使用Newtonsoft.Json.Linq;
使用Newtonsoft.Json.Schema;
使用NUnit.Framework;
使用System.Collections.Generic;
使用System.IO;
名称空间JsonSchemaExamples
{
[测试夹具]
公共类游戏
{
#区域架构定义
私有常量字符串myV4Schema=@”{
“$schema”:”http://json-schema.org/draft-04/schema#',
“类型”:“对象”,
“属性”:
{
'first_name':{'type':'string'},
“地址”:
{
“类型”:“对象”,
“属性”:
{
“街道地址”:{“类型”:“字符串”},
'state':{'type':'string'}
}
}
},
“必需”:[“名字”]
}";
私有常量字符串myV3Schema=@”{
“$schema”:”http://json-schema.org/draft-03/schema#',
“类型”:“对象”,
“属性”:
{
“名字”:
{
'类型':'字符串',
“必需”:true
},
“地址”:
{
“类型”:“对象”,
“属性”:
{
“街道地址”:{“类型”:“字符串”},
'state':{'type':'string'}
}
}
}
}";
#端区
#要验证的区域json
私有JObject validPerson=JObject.Parse(@){
“名字”:“马克”,
年龄:32岁,
“地址”:
{
“街道”:“主街1号”,
“邮政编码”:“AB12 0CD”
}
}");
private JObject invalidPerson=JObject.Parse(@){
“名称”:“标记”,
年龄:32岁,
“地址”:
{
“街道”:“主街1号”,
“邮政编码”:“AB12 0CD”
}
}");
#端区
[测试用例(myV4Schema)]
[测试用例(myV3Schema)]
公共无效检查草稿支持(字符串模式使用)
{
JSchemaUrlResolver解析器=新的JSchemaUrlResolver();
JSchema schema=JSchema.Parse(schemaToUse,解析器);
Assert.That(validPerson.IsValid(schema));
Assert.That(!invalidPerson.IsValid(schema));
}
}
}
如果我将
myV4Schema
中的
$schema
值更改为指向v3,或者使用
myV3Schema
将值更改为指向v3,则我的两个测试将继续通过。我本以为他们会失败并报告格式错误的模式(由于
required
属性)


我误解了什么,或者我做错了什么?

使用“$schema”验证模式是否符合规范将很快出现在未来的版本中。目前,V3和V4都始终受支持

更新: $schema用于NuGet上的最新版本。

如果我有一个json数据文件(不是json模式),其中$schema参数指向internet上的有效方案url。如何让JSchema从url加载模式?我看到的所有示例都将模式定义传递到JSchema中。