Heim >Backend-Entwicklung >C++ >Wie gehe ich mit unbekannten Enum-Werten während der JSON-Deserialisierung mit Json.net um?

Wie gehe ich mit unbekannten Enum-Werten während der JSON-Deserialisierung mit Json.net um?

Linda Hamilton
Linda HamiltonOriginal
2025-01-05 13:27:41922Durchsuche

How to Handle Unknown Enum Values During JSON Deserialization with Json.net?

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:

  • Wenn der JSON-Wert mit der Aufzählung (Zeichenfolge oder Ganzzahl) übereinstimmt, wird er verwendet.
  • Wenn die Aufzählung nullbar ist, wird der Wert auf Null gesetzt.
  • Wenn die Aufzählung einen „Unbekannten“ Wert hat, wird dieser verwendet.
  • Andernfalls der erste Wert der Aufzählung wird verwendet.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn