Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk menghilangkan data JSON Polymorphic menggunakan penukar JSON.NET tersuai?

Bagaimana untuk menghilangkan data JSON Polymorphic menggunakan penukar JSON.NET tersuai?

Barbara Streisand
Lepaskan: 2025-02-02 08:41:08
asal
433 orang telah melayarinya

Menggunakan Custom JSON.NET Converter Back -Sequentized Data Polymorphic JSON

Custom JSON.NET Converter menyediakan mekanisme yang kuat untuk menyesuaikan siri dan proses belakang. Ia membolehkan pemaju mengembangkan fungsi JSON.NET untuk memproses lebih banyak jenis data atau senario data yang lebih rumit.

Apabila adegan seperti itu muncul ketika berurusan dengan polimorfisme, pelbagai jenis warisan warisan. Pertimbangkan contoh berikut:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Employee : Person
{
    public string Department { get; set; }
    public string JobTitle { get; set; }
}

public class Artist : Person
{
    public string Skill { get; set; }
}
Salin selepas log masuk
Sekarang, katakan kita mempunyai contoh pekerja dan artis.

[
  {
    "Department": "Department1",
    "JobTitle": "JobTitle1",
    "FirstName": "FirstName1",
    "LastName": "LastName1"
  },
  {
    "Department": "Department2",
    "JobTitle": "JobTitle2",
    "FirstName": "FirstName2",
    "LastName": "LastName2"
  },
  {
    "Skill": "Painter",
    "FirstName": "FirstName3",
    "LastName": "LastName3"
  }
]
Salin selepas log masuk
bagaimana kita menyusun json ini untuk

dan mengenal pasti jenis tertentu setiap orang? List<Person>

<定> Penyelesaian penukar adat

Standard tidak menyediakan kaedah berdasarkan kandungan JSON untuk menentukan jenis yang betul. Walau bagaimanapun, kita boleh menulis semula kaedah <方法> dan memperkenalkan kaedah abstrak

baru (kaedah ini menerima

) untuk membuat penukar tersuai kita sendiri: CustomCreationConverter ReadJson Create Dalam adegan khusus kami, kami mencipta pengembangan JObject

:
public abstract class JsonCreationConverter<T> : JsonConverter
{
    protected abstract T Create(Type objectType, JObject jObject);

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JObject jObject = JObject.Load(reader);
        T target = Create(objectType, jObject);
        serializer.Populate(jObject.CreateReader(), target);
        return target;
    }
}
Salin selepas log masuk

JsonCreationConverter<Person> Menggunakan penukar tersuai ini, kita dapat memperdalam rentetan JSON: PersonConverter

public class PersonConverter : JsonCreationConverter<Person>
{
    protected override Person Create(Type objectType, JObject jObject)
    {
        if (FieldExists("Skill", jObject))
        {
            return new Artist();
        }
        else if (FieldExists("Department", jObject))
        {
            return new Employee();
        }
        else
        {
            return new Person();
        }
    }

    private bool FieldExists(string fieldName, JObject jObject)
    {
        return jObject[fieldName] != null;
    }
}
Salin selepas log masuk
<分> akan menganalisis kandungan JSON untuk menentukan jenis yang betul setiap orang, dan membuat contoh

,

atau
string json = "[...]"; //  此处应替换为实际的JSON字符串
List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());
Salin selepas log masuk
sewajarnya. Ini membolehkan dengan lancar memperdalam struktur data polimorfik.

PersonConverter Employee

Atas ialah kandungan terperinci Bagaimana untuk menghilangkan data JSON Polymorphic menggunakan penukar JSON.NET tersuai?. 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