Kelas polimorfik yang berukuran (objek boleh tergolong dalam subkelas yang berbeza) tanpa maklumat jenis mungkin mencabar. Artikel ini menyediakan penyelesaian yang menggunakan JsonConverrer adat untuk mengendalikan objek instantiated dalam kejadian ini, menunjukkan pelaksanaan dan aplikasinya.
JSONConverr disesuaikan
Untuk menangani polimorfisme, anda boleh membuat jsonconverrer tersuai yang diwarisi dari kelas asas JSONConverter. Penukar ini akan memproses penciptaan objek mengikut kewujudan atribut tertentu.
Pertimbangkan struktur peringkat kelas berikut:
JsonConverter Implements
public abstract class GalleryItem { public string id { get; set; } public string title { get; set; } public string link { get; set; } public bool is_album { get; set; } } public class GalleryImage : GalleryItem { // ... } public class GalleryAlbum : GalleryItem { public int images_count { get; set; } public List<GalleryImage> images { get; set; } }
GalleryItemConverter Processing Object Instance and Deepertine Process:
<示> Penggunaan dalam program sampel
public class GalleryItemConverter : JsonConverter { public override bool CanConvert(Type objectType) { return typeof(GalleryItem).IsAssignableFrom(objectType); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jo = JObject.Load(reader); // 如果 "is_album" 属性不存在,使用可空布尔值 bool? isAlbum = (bool?)jo["is_album"]; GalleryItem item; if (isAlbum.GetValueOrDefault()) { item = new GalleryAlbum(); } else { item = new GalleryImage(); } serializer.Populate(jo.CreateReader(), item); return item; } }
Output program dibahagikan kepada kedua -dua kategori ini dengan jayanya mengikut atribut "is_album".
Respons Revied ini mengekalkan imej asal dan menggunakan lebih banyak bahasa perihalan semasa mengaplikasikan kandungannya.
Atas ialah kandungan terperinci Bagaimana untuk menghilangkan objek JSON Polymorphic di JSON.NET tanpa maklumat jenis eksplisit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!