Heim >Backend-Entwicklung >C++ >Wie gehe ich mit unbekannten Enum-Werten während der JSON-Deserialisierung mit Json.net um?
Unbekannte Enum-Werte während der JSON-Deserialisierung ignorieren
Problem:
JSON-Deserialisierung mit Json. net kann Ausnahmen auslösen, wenn in JSON-Daten unbekannte Enum-Werte auftreten. Dies tritt auf, wenn eine Enumeration auf der Grundlage der aktuellen Dokumentation erstellt wird, die Drittanbieter-API jedoch später neue Enumerationswerte hinzufügt.
Lösung: Benutzerdefinierter JsonConverter
Um dieses Problem zu beheben , kann ein benutzerdefinierter JsonConverter verwendet werden. So funktioniert es:
Code-Implementierung:
class TolerantEnumConverter : JsonConverter { ... (Implementation from the provided answer) }
Verwendung:
Anwenden der [ JsonConverter(typeof(TolerantEnumConverter))]-Attribut zum Enum-Typ, um den benutzerdefinierten Konverter dabei zu verwenden Deserialisierung:
[JsonConverter(typeof(TolerantEnumConverter))] enum Status { ... (Enum values) }
Beispieldemonstration:
Der folgende Codeausschnitt demonstriert die Verwendung des TolerantEnumConverter mit verschiedenen Enum-Werten und JSON Eingaben:
string json = @" { ... (JSON data with valid and invalid enum values) }"; Foo foo = JsonConvert.DeserializeObject<Foo>(json); foreach (PropertyInfo prop in typeof(Foo).GetProperties()) { object val = prop.GetValue(foo, null); Console.WriteLine(prop.Name + ": " + (val == null ? "(null)" : val.ToString())); }
Ausgabe:
Die Konsolenausgabe zeigt, wie der TolerantEnumConverter unbekannte Enum-Werte verarbeitet, einschließlich der Festlegung von Werten auf „(null)“, „Unbekannt“ , oder den ersten Wert der Aufzählung verwenden.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit unbekannten Enum-Werten während der JSON-Deserialisierung mit Json.net um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!