我創建了一個簡單的類:C#JsonConvert轉換無效的對象
public class TestObject
{
public TestObject(int id, string name, List<string> list)
{
this.Id = id;
if (name == null)
{
throw new ArgumentException();
}
this.Name = name;
this.List = list;
}
[Required]
public int Id { get; }
public string Name { get; }
public List<string> List { get; }
}
,我想反序列化和驗證,如果原單JSON是正確的:
[Test]
public void MissingIdArgument()
{
var str = @"{ ""name"": ""aa"" } ";
Assert.Throws<JsonSerializationException>(() =>
JsonConvert.DeserializeObject<TestObject>(
str,
new JsonSerializerSettings()
{
CheckAdditionalContent = true,
DefaultValueHandling = DefaultValueHandling.Include,
MissingMemberHandling = MissingMemberHandling.Error,
NullValueHandling = NullValueHandling.Include,
}));
}
我會epxect這個測試通過但是它沒有。它不檢查在原始JSON中是否存在Id
和List
字段(儘管Id
字段是必需的)。向JSON添加一些隨機屬性會導致實際拋出異常。
如何使JsonConvert
在某種意義上是嚴格的,即測試(因爲它)會通過?
確切的說我會希望:
{ id: 1, name: "aa" }
- 失敗(因爲沒有列表定義){ name: "aa", list: null }
- 失敗(因爲沒有ID被定義){ id: 0, name: "", list: null }
- 通過
如何使用[json schema](http://www.newtonsoft.com/jsonschema)設置關於您的json的規則? –