我创建了一个简单的类: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的规则? –