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
Barbara Streisandasal
2025-02-02 08:41:08457semak imbas

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:

<code class="language-csharp">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; }
}</code>
Sekarang, katakan kita mempunyai contoh pekerja dan artis.

<code class="language-json">[
  {
    "Department": "Department1",
    "JobTitle": "JobTitle1",
    "FirstName": "FirstName1",
    "LastName": "LastName1"
  },
  {
    "Department": "Department2",
    "JobTitle": "JobTitle2",
    "FirstName": "FirstName2",
    "LastName": "LastName2"
  },
  {
    "Skill": "Painter",
    "FirstName": "FirstName3",
    "LastName": "LastName3"
  }
]</code>
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

:
<code class="language-csharp">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;
    }
}</code>

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

<code class="language-csharp">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;
    }
}</code>
akan menganalisis kandungan JSON untuk menentukan jenis yang betul setiap orang, dan membuat contoh

,

atau
<code class="language-csharp">string json = "[...]"; //  此处应替换为实际的JSON字符串
List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());</code>
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:
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