Heim >Backend-Entwicklung >C++ >Wie kann ich eine polymorphe JSON -Deserialisierung in json.net ohne Typinformationen durchführen?

Wie kann ich eine polymorphe JSON -Deserialisierung in json.net ohne Typinformationen durchführen?

Barbara Streisand
Barbara StreisandOriginal
2025-02-02 12:01:11411Durchsuche

How Can I Perform Polymorphic JSON Deserialization in Json.NET Without Type Information?

json.net ohne Typinformationen ohne Informationen. Die leistungsstarke Funktion von

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!

Stellungnahme:
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