Les classes polymorphes circularisées (les objets peuvent appartenir à différentes sous-classes) sans que les informations de type soient difficiles. Cet article fournit une solution qui utilise JSONConverrer personnalisé pour gérer l'objet instancié dans cette scène, démontrant son implémentation et son application.
JSONConverr
personnalisé Afin de gérer le polymorphisme, vous pouvez créer un JSONConverrer personnalisé hérité de la classe de base JSONConverter. Ce convertisseur traitera la création d'objets en fonction de l'existence d'attributs spécifiques.
Considérez la structure de niveau de classe suivante:
JSONConverter implémente
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 et Deepertine Process:
<示> Utilisation dans le programme d'échantillon
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; } }
La sortie du programme est divisée en ces deux catégories avec succès en fonction de l'attribut "is_album".
Cette réponse révisée maintient l'image d'origine et utilise plus de langage de description tout en paraphrasant le contenu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!