Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk melaksanakan JsonConverter tersuai di json.net untuk deserialization polymorphic?

Bagaimana untuk melaksanakan JsonConverter tersuai di json.net untuk deserialization polymorphic?

Susan Sarandon
Susan Sarandonasal
2025-02-02 08:36:11982semak imbas

How to Implement a Custom JsonConverter in JSON.NET for Polymorphic Deserialization?

json.net menyesuaikan jsonconverter untuk memproses derivatifan polimorfik

Apabila berurusan dengan jenis polimorfik dalam json.net, apabila jenis tidak jelas ditakrifkan dalam JSON, data JSON kembali -objek jenis backbone mungkin mencabar. Panduan ini menunjukkan bagaimana untuk mencapai JsonConverrer tersuai untuk mengatasi halangan ini.

cabaran

Pertimbangkan data JSON berikut:

Tugasnya adalah untuk mengembalikan data JSON ini kepada

, di mana
<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>
adalah kelas asas, dan

dan List<Person> kelas yang diperolehi. Person Employee penyelesaian Artist

Untuk menangani situasi ini, kami akan membuat kelas yang disebut , yang mewarisi

. Kelas

adalah penukar adat yang digunakan apabila jenis nilai yang menyimpulkan nilai -nilai belakang dari data JSON. PersonConverter JsonConverter Personconverter melaksanakan JsonCreationConverter<Person> JsonCreationConverter<T>

readjson kaedah penulisan semula

Dalam kaedah
<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>
kami,

ditulis semula untuk melaksanakan langkah -langkah berikut:

baca data JSON ke

. PersonConverter ReadJson panggil kaedah untuk menentukan jenis mengikut atribut JSON.

    Gunakan kaedah untuk mengisi atribut objek.
  1. JObject Kembali ke objek yang baru dibuat.
  2. Create Gunakan penukar
  3. JsonSerializer.Populate Untuk menggunakan penukar tersuai, anda boleh menggunakan kod berikut:
  4. Kesimpulan

Dengan mencapai adat , anda boleh mengendalikan derivatif polimorfik dalam json.net. yang disediakan dalam panduan ini menunjukkan cara menganalisis data JSON dan menentukan jenis yang diperolehi yang sesuai. Kaedah ini secara fleksibel mengendalikan polimorfisme semasa deepertine.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan JsonConverter tersuai di json.net untuk deserialization polymorphic?. 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