ich eine einfache Klasse erstellt haben:C# JsonConvert wandelt ungültiges Objekt
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; }
}
Welche Ich mag würde deserialisieren und zu validieren, wenn orginal JSON richtig war:
[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,
}));
}
Ich würde diesen Test epxect passieren aber es tut es nicht. Es wird nicht geprüft, ob Id
noch List
Felder in orginal JSON vorhanden sind (obwohl das Feld Id
erforderlich ist). Wenn Sie dem JSON eine zufällige Eigenschaft hinzufügen, werden tatsächlich Ausnahmen ausgelöst.
Wie man JsonConvert
streng in einem Sinne macht, dass dieser Test (wie es ist) bestanden würde?
Um genau zu sein würde ich zu erwarten:
{ id: 1, name: "aa" }
- fail (weil keine Liste definiert ist){ name: "aa", list: null }
- fail (weil keine ID definiert ist){ id: 0, name: "", list: null }
-
Wie wäre es mit einem [JSON-Schema] (http://www.newtonsoft.com/jsonschema) Regeln für Ihren JSON zu setzen? –