JSON.NET模式验证应检测重复属性



我正在努力探索一些JSON验证模式,并在JSON.NET架构(v3.0.3)中遇到了一些意外的东西。

简而言之,如果我从.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.");
}

注意:此使用模式通过了我们关注的所有其他测试用例。

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

JSON规范没有提及重复的属性,因此它们是有效但不推荐的。

相关内容

  • 没有找到相关文章

最新更新