Heim >Backend-Entwicklung >C++ >Wie kann ich eine polymorphe JSON -Deserialisierung in json.net ohne Typinformationen durchführen?
json.net ermöglicht die polymorphe JSON -Daten zurück, auch ohne Typinformationen. Dies ist besonders nützlich, wenn die Datenquellen verschiedener Arten von Arten von Typen verarbeitet werden. Die IMGUR -API gibt beispielsweise auch die Situation des Galerie -Bild- und Galeriealbums zurück. Um dies zu erreichen, haben wir einen benutzerdefinierten JsonConverter erstellt, um den sofortigen Prozess zu verarbeiten. Zunächst definieren wir unsere GalerieItem -Basisklasse und seine abgeleitete Klassengalerie und Galleryalbum:
Als nächstes erkennen wir, dass unser JsonConverter, GalleryItemConverter:
<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; } }</code>Der Konverter prüft, ob es eine Eigenschaft "is_album" gibt, um den zu instanziierten Typ zu bestimmen. Anschließend füllt es die Attribute des Objekts basierend auf den Daten im JSON -Objekt.
Um seine Verwendung zu demonstrieren, definieren wir ein Beispiel für die durch die Analyse bereitgestellten Beispieldaten:
<code class="language-csharp">public class GalleryItemConverter : JsonConverter { public override bool CanConvert(Type objectType) { return typeof(GalleryItem).IsAssignableFrom(objectType); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { // 解析包含数据的JSON对象 JObject jo = JObject.Load(reader); // 检查是否存在"is_album"以确定对象类型 bool? isAlbum = (bool?)jo["is_album"]; GalleryItem item; if (isAlbum.GetValueOrDefault()) item = new GalleryAlbum(); else item = new GalleryImage(); // 使用JsonSerializer填充对象的属性 serializer.Populate(jo.CreateReader(), item); return item; } // 对于我们的目的,不需要实现CanWrite和WriteJson }</code>
Die Ausgabe des Programms zeigt den erfolgreichen Abbau der Objekte des Galerie -Bildes und der Galeriealbum und die genaue Füllung ihrer jeweiligen Attribute.
Auf diese Weise können wir auf diese Weise die polymorphe JSON -Back -Serialisierung ohne explizite Typinformationen verarbeiten, damit wir nahtlos mit verschiedenen Datenquellen zusammenarbeiten können.
Das obige ist der detaillierte Inhalt vonWie kann ich eine polymorphe JSON -Deserialisierung in json.net ohne Typinformationen durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!