Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk melaksanakan JsonConverter tersuai di json.net untuk deserialization polymorphic?
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
JsonCreationConverter<Person>
JsonCreationConverter<T>
<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.
JObject
Kembali ke objek yang baru dibuat. Create
Gunakan penukar JsonSerializer.Populate
Untuk menggunakan penukar tersuai, anda boleh menggunakan kod berikut:
Dengan mencapai adat
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!