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

Wie gehe ich während der JSON-Deserialisierung ordnungsgemäß mit unbekannten Enum-Werten um?

Barbara Streisand
Freigeben: 2025-01-01 11:02:09
Original
740 Leute haben es durchsucht

How to Gracefully Handle Unknown Enum Values During JSON Deserialization?

Unbekannte Enum-Werte während der JSON-Deserialisierung ignorieren

Wenn Sie JSON-Daten in eine Enumeration deserialisieren, kann es zu Situationen kommen, in denen die JSON-Eigenschaft enthält Werte, die mit keinem vorhandenen Enum-Wert übereinstimmen. Standardmäßig kann dies zu Fehlern führen.

TolerantEnumConverter zur Rettung

Um dies elegant zu handhaben, können Sie einen benutzerdefinierten JsonConverter namens TolerantEnumConverter verwenden. Dieser Konverter bietet einen flexiblen Ansatz für den Umgang mit unbekannten Enum-Werten, indem er eine Reihe von Regeln definiert:

  1. Wenn der JSON-Wert mit einem vorhandenen Enum-Wert übereinstimmt, wird er verwendet.
  2. Wenn das Enum stimmt nullable und der JSON-Wert null ist, wird er auf null gesetzt.
  3. Wenn die Aufzählung einen Wert namens „Unbekannt“ hat, ist dies der Fall verwendet.
  4. Andernfalls wird der erste Wert der Aufzählung verwendet.

Implementierungsdetails

Der TolerantEnumConverter verarbeitet sowohl Zeichenfolgen- als auch Ganzzahlwerte in JSON. Es prüft auf Übereinstimmungen basierend auf Zeichenkettenvergleichen ohne Berücksichtigung der Groß- und Kleinschreibung oder auf dem Vorhandensein im Satz von Enum-Werten.

Beispielverwendung

Um den TolerantEnumConverter zu verwenden, kommentieren Sie Ihre Enum-Eigenschaften mit das [JsonConverter(typeof(TolerantEnumConverter))]-Attribut. Hier ist ein Beispiel:

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status
{
    Ready = 1,
    Set = 2,
    Go = 3,
}
Nach dem Login kopieren

Demoanwendung

Die folgende Demoanwendung zeigt, wie der TolerantEnumConverter verwendet wird, um sowohl Nicht-Nullables als auch Nullables zu verarbeiten Aufzählungen:

// Sample JSON data
string json = @"
{
    ""NonNullableStatusWithValidStringValue"" : ""Set"",
    ""NonNullableStatusWithInvalidStringValue"" : ""Blah"",
    ""NullableStatusWithValidStringValue"" : ""Go"",
    ""NullableStatusWithInvalidStringValue"" : ""Blah"",
}";

// Deserialize JSON data into Foo object
Foo foo = JsonConvert.DeserializeObject<Foo>(json, new JsonSerializerSettings
{
    Converters = { new TolerantEnumConverter() }
});

// Output the deserialized values
foreach (PropertyInfo prop in typeof(Foo).GetProperties())
{
    Console.WriteLine(prop.Name + ": " + (prop.GetValue(foo) ?? "(null)"));
}
Nach dem Login kopieren

Ausgabe:

NonNullableStatusWithValidStringValue: Set
NonNullableStatusWithInvalidStringValue: Ready
NullableStatusWithValidStringValue: Go
NullableStatusWithInvalidStringValue: (null)
Nach dem Login kopieren

Fazit

Der TolerantEnumConverter bietet eine praktische Möglichkeit, JSON-Daten in Aufzählungen zu deserialisieren, ohne dass Fehler auftreten für unbekannte Werte. Es bietet anpassbares Verhalten, um Ihren spezifischen Anforderungen gerecht zu werden.

Das obige ist der detaillierte Inhalt vonWie gehe ich während der JSON-Deserialisierung ordnungsgemäß mit unbekannten Enum-Werten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage