我正在研究一些json验证模式,并在Json.Net Schema(v3.0.3)中遇到了一些意想不到的事情。
简而言之,如果我从.net类型生成我的模式,然后输入包含两个属性之一的数据字符串,我希望验证器抛出异常。但是它以最后的胜利方式接受多个值。有没有办法让它拒绝具有多个值的数据?
示例,这是我的类型:
class TestObject {
[Required]
public int? Id { get; set; }
public string Name { get; set; }
public bool? Flag { get; set; }
}
然后这是我使用该类型放在一起的测试代码(注意数据包含name属性两次):
var jsonString="{'Id': 111, 'Name': 'SomeValue', 'Flag': true, 'Name':'IgnoredValue'}";
var reader=new JSchemaValidatingReader(new JsonTextReader(new StringReader(jsonString))) {
Schema=new JSchemaGenerator() { DefaultRequired=Required.Default }.Generate(typeof(TestObject))
};
// Act
try {
var result=JsonSerializer.Create().Deserialize<TestObject>(reader);
Assert.Fail("Exception expected.");
}
注意:此使用模式会传递我们所关注的所有其他测试用例。
答案 0 :(得分:0)
JSON Schema没有任何验证来检测JSON对象中的重复属性。
JSON规范没有提及重复属性,因此它们有效但不推荐。