Maison >développement back-end >C++ >Comment désérialiser JSON polymorphe dans json.net sans informations de type?
Aucun type d'informations, en utilisant JSON.net, la classe JSON polymorphe séquentifiée
Lorsque les données JSON contiennent différents types d'objets et ne contiennent pas d'informations de type explicite, le back-lerialization de JSON.net sera confronté à des défis. Afin de surmonter cet obstacle, un convertisseur JSON personnalisé peut être développé, qui a instantanément instancié la classe correspondante en fonction des attributs spécifiques.
Considérons un exemple, où l'API Imgur appelle renvoie une liste, qui contient les classes GalleryImage et Galleryalbum exprimées dans JSON. En raison de l'absence d'attributs de type $, il n'est pas possible d'utiliser json.net pour l'automatisation. Cependant, en utilisant la propriété is_album, nous pouvons distinguer ces deux catégories.
Pour réaliser JSONConverter personnalisé, nous définissons notre classe et créons une galerie de convertisseur, comme illustré ci-dessous:
Dans la méthode Readjson du convertisseur, nous vérifions la propriété is_album pour déterminer le type d'objet à instanciation. Utilisez ensuite un sérialiseur pour remplir les données JSON dans l'objet.
<code class="language-csharp">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; } } public class GalleryItemConverter : JsonConverter { // ... }</code>
Il s'agit d'un exemple de programme qui démontre l'utilisation de ce convertisseur:
La sortie affichait l'objet de la profondeur et ses attributs respectifs, y compris l'image de l'objet Galleryalbum. La GalleryItemConverter personnalisée fournit une solution qui peut être sérialisée sans informations de type explicite pour gérer efficacement diverses structures de données.
<code class="language-csharp">List<GalleryItem> items = JsonConvert.DeserializeObject<List<GalleryItem>>(json, new GalleryItemConverter());</code>
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!