Heim >Backend-Entwicklung >C++ >Wie kann ich JSON mit inkonsistenten Array- und Einzelobjektstrukturen für dieselbe Eigenschaft deserialisieren?
Verarbeitung gemischter Sammlungen und einzelner Objekte in JSON-Daten
Herkömmliche Deserialisierungstechniken können beim Deserialisieren von JSON-Daten, die Arrays und einzelne Objekte mit denselben Eigenschaften enthalten, auf Schwierigkeiten stoßen. In diesem Artikel wird das spezielle Szenario erläutert, in dem die von Facebook zurückgegebene JSON-Antwort Mediendaten manchmal als Objekte und manchmal als Arrays darstellt.
Um dieses Problem zu lösen, können Sie einen benutzerdefinierten JSON-Konverter verwenden. Dieser Konverter fungiert als Vermittler zwischen dem Standard-Deserialisierungsprozess von JSON.NET und der Zielklasse. In diesem Fall ist die Zielklasse FacebookAttachment, die eine List
Der benutzerdefinierte Konverter FacebookMediaJsonConverter überschreibt die ReadJson-Methode, um inkonsistente Datenformate zu verarbeiten. Insbesondere prüft es JsonReader.TokenType und führt eine entsprechende Deserialisierung durch:
<code>public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.StartArray) return serializer.Deserialize<List<facebookmedia>>(reader); else return null; }</code>
Wenn ein Array gefunden wird, gibt der Konverter das deserialisierte Array zurück. Wenn jedoch ein einzelnes Objekt angetroffen wird, wird null zurückgegeben. Dies liegt daran, dass die Zieleigenschaft „Medien“ eine Liste erwartet.
Durch die Verwendung dieses Konverters kann sich der Deserialisierungsprozess an inkonsistente Formatierungen in JSON-Antworten anpassen. Allerdings ist zu beachten, dass diese Methode nicht alle möglichen Änderungen in der JSON-Struktur berücksichtigt und möglicherweise nicht für alle Szenarien geeignet ist.
Das obige ist der detaillierte Inhalt vonWie kann ich JSON mit inkonsistenten Array- und Einzelobjektstrukturen für dieselbe Eigenschaft deserialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!