Maison >développement back-end >C++ >Comment puis-je désérialiser JSON avec des structures de tableau et d'objet unique incohérentes pour la même propriété ?
Gestion des collections mixtes et des objets uniques dans les données JSON
Les techniques de désérialisation traditionnelles peuvent rencontrer des difficultés lors de la désérialisation de données JSON contenant des tableaux et des objets uniques ayant les mêmes propriétés. Cet article traite du scénario spécifique dans lequel la réponse JSON renvoyée par Facebook présente les données multimédias parfois sous forme d'objets et parfois sous forme de tableaux.
Pour résoudre ce problème, vous pouvez utiliser un convertisseur JSON personnalisé. Ce convertisseur agit comme intermédiaire entre le processus de désérialisation par défaut de JSON.NET et la classe cible. Dans ce cas, la classe cible est FacebookAttachment, qui contient une propriété List
Le convertisseur personnalisé FacebookMediaJsonConverter remplace la méthode ReadJson pour gérer les formats de données incohérents. Plus précisément, il vérifie JsonReader.TokenType et effectue la désérialisation en conséquence :
<code>public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.StartArray) return serializer.Deserialize<List<facebookmedia>>(reader); else return null; }</code>
Si un tableau est rencontré, le convertisseur renverra le tableau désérialisé. Cependant, si un seul objet est rencontré, il renvoie null. En effet, la propriété cible Media attend une liste.
En utilisant ce convertisseur, le processus de désérialisation peut s'adapter à un formatage incohérent dans les réponses JSON. Cependant, il convient de noter que cette méthode ne prend pas en compte toutes les modifications possibles dans la structure JSON et peut ne pas convenir à tous les scénarios.
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!