Heim >Backend-Entwicklung >C++ >Wie kann ich beim Deserialisieren von JSON mit unbekannten Enum-Werten umgehen?

Wie kann ich beim Deserialisieren von JSON mit unbekannten Enum-Werten umgehen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-31 10:16:14191Durchsuche

How Can I Handle Unknown Enum Values When Deserializing JSON?

JSON mit unbekannten Enum-Werten deserialisieren

Beim Parsen von JSON-Daten ist es wichtig, mit Szenarios umzugehen, in denen die bereitgestellten Enum-Werte nicht mit den in Ihrer Codebasis definierten übereinstimmen. Dies tritt häufig auf, wenn APIs von Drittanbietern im Laufe der Zeit neue Enum-Werte einführen.

Lösung: Benutzerdefinierter JsonConverter

Um dieses Problem zu beheben, können Sie einen benutzerdefinierten JsonConverter erstellen:

class TolerantEnumConverter : JsonConverter
{
    // ... Implementation ...
}

Dieser Konverter vereinfacht den Deserialisierungsprozess wie folgt Logik:

  • Wenn der JSON-Wert mit einem vorhandenen Enumerationswert übereinstimmt (entweder als Zeichenfolge oder Ganzzahl), wird dieser Wert zugewiesen.
  • Für nullfähige Enumerationen wird Null zurückgegeben, wenn der Wert fehlt.
  • Wenn die Aufzählung einen „Unbekannten“ Wert enthält, wird dieser Wert festgelegt.
  • Andernfalls wird er verwendet den ersten Enum-Wert.

Beispielverwendung:

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status { Ready, Set, Go }

string json = @"{ ""status"": ""SomethingElse"" }";

var status = JsonConvert.DeserializeObject<Status>(json); // Returns "Ready"

Nullable Enums und „Unbekannte“ Werte:

Um nullfähige Aufzählungen mit unbekannten Werten zu verarbeiten, können Sie Ihrer Aufzählungsdefinition einen „Unbekannten“ Wert hinzufügen. Zum Beispiel:

[JsonConverter(typeof(TolerantEnumConverter))]
enum Color { Red, Yellow, Green, Unknown = 99 }

string colorJson = @"{ ""color"": ""Purple"" }";

var color = JsonConvert.DeserializeObject<Color?>(colorJson); // Returns null

Fazit:

Durch die Verwendung des hier vorgestellten benutzerdefinierten JsonConverters können Sie sicherstellen, dass die JSON-Deserialisierung reibungslos verläuft, selbst wenn sich die Enum-Werte im Laufe der Zeit ändern. Fehler verhindern und Datenintegrität wahren.

Das obige ist der detaillierte Inhalt vonWie kann ich beim Deserialisieren von JSON mit unbekannten Enum-Werten umgehen?. 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