Heim >Backend-Entwicklung >C++ >Wie kann man polymorphe JSON -Objekte in json.net ohne explizite Typinformationen deserialisieren?

Wie kann man polymorphe JSON -Objekte in json.net ohne explizite Typinformationen deserialisieren?

Patricia Arquette
Patricia ArquetteOriginal
2025-02-02 12:06:12887Durchsuche

How to Deserialize Polymorphic JSON Objects in Json.NET Without Explicit Type Information?

Sie müssen keine offensichtlichen Typinformationen sein.

kreisförmige polymorphe Klassen (Objekte können zu verschiedenen Unterklassen gehören) ohne Typinformationen können eine Herausforderung sein. Dieser Artikel enthält eine Lösung, die benutzerdefinierte jsonConverrer verwendet, um das sofortige Objekt in dieser Szene zu verarbeiten und seine Implementierung und Anwendung zu demonstrieren. angepasste JsonConverr

Um mit dem Polymorphismus umzugehen, können Sie einen benutzerdefinierten JSONCONVERRER erstellen, der von der JsonConverter -Basisklasse geerbt wurde. Dieser Konverter verarbeitet die Erstellung von Objekten gemäß der Existenz spezifischer Attribute.

Betrachten Sie die folgende Struktur der Klassenebene:

JsonConverter implementiert

GalleryItemConverter -Verarbeitungsobjektinstanz und tieferer Prozess:
<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>

Verwendung im Beispielprogramm

Die folgenden Verfahren zeigen die Verwendung von GalleryItemConverter:

<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)
    {
        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();
        }

        serializer.Populate(jo.CreateReader(), item);

        return item;
    }
}</code>

Die Programmausgabe ist nach dem Attribut "is_album" erfolgreich in diese beiden Kategorien unterteilt. Diese Revise -Antwort behält das Originalbild bei und verwendet mehr Beschreibung Sprache, während der Inhalt paraphrasiert.

Das obige ist der detaillierte Inhalt vonWie kann man polymorphe JSON -Objekte in json.net ohne explizite Typinformationen deserialisieren?. 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