根据JSON模式C#验证JSON
有没有一种方法可以针对该结构的JSON模式验证JSON结构?我已经查看并发现JSON.Net验证了,但这并不能满足我的要求。
JSON.net可以:
JsonSchema schema = JsonSchema.Parse(@"{ 'type': 'object',
'properties': {
'name': {'type':'string'},
'hobbies': {'type': 'array'}
}
}");
JObject person = JObject.Parse(@"{
'name': 'James',
'hobbies': ['.NET', 'LOLCATS']
}");
bool valid = person.IsValid(schema);
// true
这证明是正确的。
JsonSchema schema = JsonSchema.Parse(@"{ 'type': 'object',
'properties': {
'name': {'type':'string'},
'hobbies': {'type': 'array'}
}
}");
JObject person = JObject.Parse(@"{
'surname': 2,
'hobbies': ['.NET', 'LOLCATS']
}");
bool valid = person.IsValid(schema);
这也证明是真的
JsonSchema schema = JsonSchema.Parse(@"{ 'type': 'object',
'properties': {
'name': {'type':'string'},
'hobbies': {'type': 'array'}
}
}");
JObject person = JObject.Parse(@"{
'name': 2,
'hobbies': ['.NET', 'LOLCATS']
}");
bool valid = person.IsValid(schema);
仅此验证为假。
理想情况下,我希望它可以验证那里也没有name
应该存在的字段surname
。
回答:
我认为您只需要添加
'additionalProperties': false
到您的架构。这将停止提供未知属性。
因此,现在您的结果将是:-正确,错误,错误
测试代码…
void Main(){
var schema = JsonSchema.Parse(
@"{
'type': 'object',
'properties': {
'name': {'type':'string'},
'hobbies': {'type': 'array'}
},
'additionalProperties': false
}");
IsValid(JObject.Parse(
@"{
'name': 'James',
'hobbies': ['.NET', 'LOLCATS']
}"),
schema).Dump();
IsValid(JObject.Parse(
@"{
'surname': 2,
'hobbies': ['.NET', 'LOLCATS']
}"),
schema).Dump();
IsValid(JObject.Parse(
@"{
'name': 2,
'hobbies': ['.NET', 'LOLCATS']
}"),
schema).Dump();
}
public bool IsValid(JObject obj, JsonSchema schema)
{
return obj.IsValid(schema);
}
输出:-
TrueFalse
False
您还可以在必须提供的字段中添加“ required”:true,这样您就可以返回消息,其中包含缺少/无效的字段的详细信息:
Property 'surname' has not been defined and the schema does not allow additional properties. Line 2, position 19. Required properties are missing from object: name.
Invalid type. Expected String but got Integer. Line 2, position 18.
以上是 根据JSON模式C#验证JSON 的全部内容, 来源链接: utcz.com/qa/413018.html