我是JSON架构和Json.NET架构的新手。只是按照示例编写了一个执行模式验证的测试程序。我选择了一个随机模式和一个randome JSON文件,但最后的IsValid()调用返回True。我错过了什么吗?谢谢。
static void SchemaTest3()
{
string schemaJson = @"{
'description': 'A person',
'type': 'object',
'properties': {
'name': {'type':'string'},
'hobbies': {
'type': 'array',
'items': {'type':'string'}
}
}
}";
JSchema schema = JSchema.Parse(schemaJson);
IList<string> errorMessages;
JToken jToken = JToken.Parse(@"{
'@Id': 1,
'Email': 'james@example.com',
'Active': true,
'CreatedDate': '2013-01-20T00:00:00Z',
'Roles': [
'User',
'Admin'
],
'Team': {
'@Id': 2,
'Name': 'Software Developers',
'Description': 'Creators of fine software products and services.'
}
}");
bool isValid = jToken.IsValid(schema, out errorMessages);
Console.Write(isValid);
}
答案 0 :(得分:1)
您选择的架构允许添加其他属性,并且不会生成任何字段&#34; required&#34;,这是任何有效的json将传递您的架构的原因。
如果添加&#34; additionalProperties&#34;:false,这将使您的架构更加严格。
您可以使用http://www.jsonschemavalidator.net/来玩您的架构并探索其他选项。
我从json架构开始时发现http://json-schema.org/examples.html非常有用。
这是你的架构更加严格。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"description": "A person",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"hobbies": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}