Ich habe eine Modellklasse deklariert, deren Eigenschaften von JSON aufgefüllt werden müssen, und einige, die mit Code gefüllt werden, angezeigt durch die Attribute JsonObject und . Hier ist eine vereinfachte Version:Unerwartete Json.NET-Ausnahme bei Verwendung von MemberSerialization.OptIn und Required.Always
[JsonObject(MemberSerialization.OptIn, ItemRequired = Required.Always)]
public class AppCard
{
[JsonProperty]
public string Name { get; set; }
[JsonProperty]
public string Author { get; set; }
public bool IsInstalled { get; set; }
}
Hier ist die JSON aus meinem Unit-Test:
[
{
"name": "App 1",
"author": "Author 1"
},
{
"name": "App 2",
"author": "Author 2"
}
]
Und hier ist, wo ich DeserializeObject nennen:
appCards = JsonConvert.DeserializeObject<IEnumerable<AppCard>>(content);
Leider ist dies nicht mit der Folgefehler:
Newtonsoft.Json.JsonSerializationException: Required property 'IsInstalled'
not found in JSON. Path '[0]', line 5, position 3.
Da diese Eigenschaft nicht über das JsonProperty-Attribut verfügt und OptIn angegeben wird, ging ich davon aus, dass die DeserializeObject-Methode sie ignorieren würde. Habe ich missverstanden, wie diese Einstellungen zusammen funktionieren sollen?
Ich dachte, es könnte ein Fehler sein (oder schließen) - danke fürs Durchgraben und Bestätigen! Und danke für die Problemumgehung - es ist sehr sauber, wie du gesagt hast. –