Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk menghilangkan objek JSON Polymorphic di JSON.NET tanpa maklumat jenis eksplisit?

Bagaimana untuk menghilangkan objek JSON Polymorphic di JSON.NET tanpa maklumat jenis eksplisit?

Patricia Arquette
Lepaskan: 2025-02-02 12:06:12
asal
885 orang telah melayarinya

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

Tidak perlu menjadi maklumat jenis yang jelas, gunakan kelas JSON.NET Back -sequenticed Polymorphic JSON CLASS

Kelas polimorfik yang berukuran (objek boleh tergolong dalam subkelas yang berbeza) tanpa maklumat jenis mungkin mencabar. Artikel ini menyediakan penyelesaian yang menggunakan JsonConverrer adat untuk mengendalikan objek instantiated dalam kejadian ini, menunjukkan pelaksanaan dan aplikasinya.

JSONConverr disesuaikan

Untuk menangani polimorfisme, anda boleh membuat jsonconverrer tersuai yang diwarisi dari kelas asas JSONConverter. Penukar ini akan memproses penciptaan objek mengikut kewujudan atribut tertentu.

Pertimbangkan struktur peringkat kelas berikut:

JsonConverter Implements

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; }
}
Salin selepas log masuk

GalleryItemConverter Processing Object Instance and Deepertine Process:

<示> Penggunaan dalam program sampel

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;
    }
}
Salin selepas log masuk
Prosedur berikut menunjukkan penggunaan GalleryItemConverter:

Output program dibahagikan kepada kedua -dua kategori ini dengan jayanya mengikut atribut "is_album".

Respons Revied ini mengekalkan imej asal dan menggunakan lebih banyak bahasa perihalan semasa mengaplikasikan kandungannya.

Atas ialah kandungan terperinci Bagaimana untuk menghilangkan objek JSON Polymorphic di JSON.NET tanpa maklumat jenis eksplisit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan