Json.Net 架构验证是否应该检测到重复的属性

Should Json.Net Schema validation detect duplicate properties

我正在努力探索一些 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 规范没有提及重复属性,因此它们有效但不推荐。