2017-09-26 50 views
0

我正在研究一些json验证模式,并在Json.Net架构(v3.0.3)中遇到意想不到的情况。Json.Net架构验证是否检测到重复属性

简而言之,如果我从.net类型生成我的模式,然后提供包含两个属性之一的数据字符串,我希望验证器引发异常。不过,它以最后一种方式接受多个值。有没有办法让它拒绝具有多个值的数据?

例如,这是我喜欢的类型:

class TestObject { 
    [Required] 
    public int? Id { get; set; } 
    public string Name { get; set; } 
    public bool? Flag { get; set; } 
} 

那么这是考验我放在一起使用该类型的代码(注意,该数据包含名称属性两次):

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

JSON Schema没有任何验证来检测JSON对象中的重复属性。

JSON规范没有提及任何重复的属性,所以它们是有效的,但不推荐。