我试图通过模式验证来验证我的json,但我认为存在一些问题:
string schemaJson = @"
{
'description': 'A payload',
'type': 'object',
'properties': {
'totalRecords': {'type':'number'},
'payload': {
'type': 'object',
'properties': {'name':{'type':'string'}}
}
},
'additionalProperties': false
}";
JsonSchema schema = JsonSchema.Parse(schemaJson);
JObject payl = JObject.Parse(@"
{
'totalRecords': 75,
'payload':{'namdse':'ksjfkjsdkfjkd'}
}");
IList<string> messages;
bool valid = payl.IsValid(schema, out messages);
Console.WriteLine(valid);
foreach (string message in messages)
{
Console.WriteLine(message);
}
控制台返回true
但它应该返回false
,因为我使用了错误的属性名称namdse
而不是name
。
答案 0 :(得分:3)
尝试在additionalProperties
媒体资源中设置false
至payload
。
...
'payload': {
'type': 'object',
'properties': {
'name':{'type':'string'}
},
'additionalProperties': false
}
...
您的json有效,因为namdse
被视为附加属性。如果name
是必填字段,您可能还需要添加required
关键字。
...
'payload': {
'type': 'object',
'properties': {
'name':{'type':'string', 'required': true}
},
'additionalProperties': false
}
...
答案 1 :(得分:0)
你的对象是无效的json,使用双引号,这在http://jsonlint.com/
中有效{
"description": "A payload",
"type": "object",
"properties": {
"totalRecords": {
"type": 123
},
"payload": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
}
}
},
"additionalProperties": false
}