Maison >développement back-end >C++ >Comment désérialiser un tableau JSON de valeurs de type mixte dans une classe C# fortement typée ?
Désérialisation de tableaux JSON avec des types de données mixtes en classes C#
Ce guide aborde les complexités de la désérialisation des données JSON où la structure présente des défis pour le mappage direct vers des classes C# fortement typées. Plus précisément, nous aborderons des scénarios impliquant des tableaux de types de données mixtes au sein d'une structure apparemment semblable à un dictionnaire.
Le problème :
Les structures JSON courantes peuvent présenter des données où :
Solutions :
Plusieurs techniques permettent de surmonter ces obstacles :
1. Tirer parti de ObjectToArrayConverter
:
Le ObjectToArrayConverter
de Json.NET fournit un mécanisme puissant pour mapper un tableau de valeurs aux propriétés d'un objet C#. Cela nécessite un examen attentif de l'ordre de propriété.
<code class="language-csharp">[JsonConverter(typeof(ObjectToArrayConverter<Player>))] public class Player { [JsonProperty(Order = 1)] public int UniqueID { get; set; } [JsonProperty(Order = 2)] public string PlayerDescription { get; set; } // ... other properties }</code>
La propriété JsonProperty
de l'attribut Order
est cruciale ; il garantit le mappage correct des éléments du tableau aux propriétés en fonction de leur séquence.
2. Restructuration de l'objet racine :
Une approche plus simple pourrait impliquer de restructurer l'objet racine pour représenter directement la nature des données, semblable à un dictionnaire.
<code class="language-csharp">public class ScoreboardResults { // ... other properties public Dictionary<string, Player> Players { get; set; } }</code>
Cela simplifie considérablement la désérialisation, car les clés et valeurs du dictionnaire correspondent directement à la structure JSON.
3. Convertisseur personnalisé (avancé) :
Pour les scénarios complexes, un JsonConverter personnalisé offre le plus de contrôle. Cela permet une logique d'analyse complexe adaptée à la structure JSON spécifique.
Exemple (en utilisant ObjectToArrayConverter
) :
<code class="language-csharp">// Sample JSON (replace with your actual JSON) string jsonString = "..."; // Deserialize using ObjectToArrayConverter var results = JsonConvert.DeserializeObject<ScoreboardResults>(jsonString); // Access player data foreach (var kvp in results.Players) { Console.WriteLine($"{kvp.Key}: {kvp.Value.UniqueID} - {kvp.Value.PlayerDescription}"); }</code>
N'oubliez pas d'installer le package Newtonsoft.Json NuGet pour la fonctionnalité Json.NET. Choisissez la solution la mieux adaptée à votre structure et à votre complexité JSON. La restructuration de l'objet racine constitue souvent la solution la plus simple et la plus maintenable. ObjectToArrayConverter
est un outil puissant pour les scénarios plus complexes nécessitant un contrôle précis de l'ordre des propriétés. Un convertisseur personnalisé ne doit être envisagé que lorsque les autres méthodes sont insuffisantes.
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!