Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk membuat jsonconverter tersuai di json.net untuk mengendalikan siri polimorfik tanpa typenameHandling?
Melaksanakan JSONConConverRter yang disesuaikan
mari kita pertimbangkan contoh, di mana anda mempunyai orang kelas asas dan dua pekerja dan artis yang diperolehi. Anda mempunyai senarai objek orang yang perlu bersiri sebagai JSON. Walau bagaimanapun, anda ingin mengelakkan menggunakan typenameHandling. Di sinilah JsonConverter adat boleh memainkan peranan.
Atas sebab ini, kita perlu menentukan personconverter penukar adat, yang memperluaskan JsonCreationverter
. Dalam kaedah membuat penukar, kita boleh menganalisis objek JSON untuk menentukan jenis derivatif yang betul mengikut kewujudan bidang tertentu.
<code class="language-c#">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>Sekarang, apabila aliran balik JSON bersiri kembali ke senarai
objek, anda boleh menggunakan penukar tersuai:
<code class="language-c#">string json = "[...]"; List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());</code>Ingatlah bahawa apabila menggunakan penukar tersuai semasa pengukuhan, contoh Personconverter perlu diserahkan kepada JSONCONVERT.DESERIALIZEObject. Kaedah ini membolehkan anda memproses jenis data yang kompleks atau disesuaikan dengan menyediakan logik penukaran khas dalam jsonconverrer tersuai.
Atas ialah kandungan terperinci Bagaimana untuk membuat jsonconverter tersuai di json.net untuk mengendalikan siri polimorfik tanpa typenameHandling?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!