Keine Informationsart unter Verwendung von JSON.net Back -sequentialisierte polymorphe JSON -Klasse
Wenn die JSON -Daten verschiedene Arten von Objekten enthalten und keine expliziten Typinformationen haben, steht JSON.NETs Back -Serialization vor Herausforderungen. Um dieses Hindernis zu überwinden, kann ein benutzerdefinierter JsonConverter entwickelt werden, der die entsprechende Klasse sofort nach bestimmten Attributen instanziierte.
Betrachten wir ein Beispiel, bei dem die IMGUR -API -Aufrufe eine Liste zurückgeben, die die in JSON ausgedrückten GalerieImage- und Galeriealbum -Klassen enthält. Aufgrund des Mangels an $ Typ -Attributen ist es nicht möglich, JSON.NET für die Automatisierung zu verwenden. Durch die Verwendung der IS_ALBUM -Eigenschaft können wir diese beiden Kategorien jedoch unterscheiden.
Um benutzerdefinierte JsonConverter zu realisieren, definieren wir unsere Klasse und erstellen einen GalerieItemConverter, wie unten gezeigt:
In der Readjson -Methode des Konverters überprüfen wir die Eigenschaft is_album, um den zu instanziierten Objekttyp zu bestimmen. Verwenden Sie dann einen Serialisierer, um die JSON -Daten in das Objekt zu füllen.
<code class="language-csharp">public abstract class GalleryItem { public string id { get; set; } public string title { get; set; } public string link { get; set; } public bool is_album { get; set; } } public class GalleryImage : GalleryItem { // ... } public class GalleryAlbum : GalleryItem { public int images_count { get; set; } public List<GalleryImage> images { get; set; } } public class GalleryItemConverter : JsonConverter { // ... }</code>
Dies ist ein Beispielprogramm, das die Verwendung dieses Konverters demonstriert:
Die Ausgabe zeigte das Objekt der Deepertalisierung und ihre jeweiligen Attribute, einschließlich des Bildes des Galerie -Bum -Objekts. Der benutzerdefinierte GalerieItemConverter bietet eine Lösung, die ohne explizite Typinformationen serialisiert werden kann, um verschiedene Datenstrukturen effektiv zu verarbeiten.
<code class="language-csharp">List<GalleryItem> items = JsonConvert.DeserializeObject<List<GalleryItem>>(json, new GalleryItemConverter());</code>
Das obige ist der detaillierte Inhalt vonWie kann man polymorphe JSON in json.net ohne Typinformationen deserialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!