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:
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, }
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)")); }
Ausgabe:
NonNullableStatusWithValidStringValue: Set NonNullableStatusWithInvalidStringValue: Ready NullableStatusWithValidStringValue: Go NullableStatusWithInvalidStringValue: (null)
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!