2017-09-26 81 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規範沒有提及任何重複的屬性,所以它們是有效的,但不推薦。