Heim >Backend-Entwicklung >C++ >Wie gehe ich mit JSON-Deserialisierungsfehlern mit nicht übereinstimmenden Enum-Werten um?
JSON-Deserialisierungsfehler mit unbekannten Enum-Werten überwinden
Beim Umgang mit JSON-Serialisierung und -Deserialisierung kommt es nicht selten vor, dass Ihre Enum-Werte auf Situationen stoßen stimmen nicht mit den in der JSON-Eigenschaft bereitgestellten Zeichenfolgenwerten überein. Dies kann dazu führen, dass während der Deserialisierung Ausnahmen ausgelöst werden, die den Ablauf Ihrer Anwendung stören.
Um dieser Herausforderung zu begegnen, können wir einen benutzerdefinierten JsonConverter mit flexibler Handhabung von Enum-Werten verwenden. Der TolerantEnumConverter kann verschiedene Szenarien verarbeiten, sodass Sie das Verhalten an Ihre Bedürfnisse anpassen können.
Konverterfunktionalität:
Code Beispiel:
class TolerantEnumConverter : JsonConverter { // Handle deserialization for enum types public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { // Get the underlying type for nullable types Type enumType = IsNullableType(objectType) ? Nullable.GetUnderlyingType(objectType) : objectType; // Attempt to match the JSON value to an enum value string[] names = Enum.GetNames(enumType); string enumText = reader.Value.ToString(); string match = names .Where(n => string.Equals(n, enumText, StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(); if (match != null) { return Enum.Parse(enumType, match); } // Handle nullable types if (IsNullableType(objectType)) { return null; } // Handle enums with an "Unknown" value string defaultName = names .Where(n => string.Equals(n, "Unknown", StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(); return Enum.Parse(enumType, defaultName ?? names.First()); } }
Verwendung:
Um den Konverter zu verwenden, dekorieren Sie Ihre Enum-Eigenschaften mit dem Attribut [JsonConverter]:
[JsonConverter(typeof(TolerantEnumConverter))] enum Status { Ready = 1, Set = 2, Go = 3 }
Durch die Nutzung des TolerantEnumConverter können Sie sicherstellen, dass Ihre Anwendung währenddessen ordnungsgemäß mit Enum-Wert-Nichtübereinstimmungen umgeht JSON-Deserialisierung, um unnötige Fehler zu verhindern und die Datenintegrität aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit JSON-Deserialisierungsfehlern mit nicht übereinstimmenden Enum-Werten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!