Maison >développement back-end >C++ >Comment désérialiser un tableau JSON de données mixtes en classes C# fortement typées ?
Cet article montre comment désérialiser un tableau JSON contenant des types de données mixtes en classes C# fortement typées. Le défi réside dans le schéma incohérent du JSON, où les valeurs d'un dictionnaire sont des tableaux d'éléments sans nom.
L'exemple JSON ressemble à ceci :
<code class="language-json">{ "timestamp": 1473730993, "total_players": 945, "max_score": 8961474, "players": { "Player1Username": [ 121, "somestring", 679900, 5, 4497, "anotherString", "thirdString", "fourthString", 123, 22, "YetAnotherString"], "Player2Username": [ 886, "stillAstring", 1677, 1, 9876, "alwaysAstring", "thirdString", "fourthString", 876, 77, "string"] } }</code>
La solution utilise Newtonsoft.Json et un convertisseur personnalisé, ObjectToArrayConverter<T>
, pour mapper les éléments du tableau sans nom aux propriétés d'une classe Player
. L'attribut JsonProperty
avec le paramètre Order
est crucial pour mapper correctement les éléments du tableau aux propriétés de classe en fonction de leur position.
Voici une représentation simplifiée des classes clés :
Classe de joueur :
<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 classe ObjectToArrayConverter<T>
(implémentation omise par souci de concision) gère la logique de conversion. L'objet racine, ScoreboardResults
, est défini pour contenir l'intégralité de la structure JSON :
Classe de résultats du tableau de bord :
<code class="language-csharp">public class ScoreboardResults { public int timestamp { get; set; } public int total_players { get; set; } public int max_score { get; set; } public Dictionary<string, Player> players { get; set; } }</code>
Alternativement, les attributs DataContract
et DataMember
peuvent obtenir des résultats similaires en spécifiant l'ordre des propriétés. L'article suggère d'explorer des outils de démonstration (liens non inclus ici) pour des exemples de code complets. Cette approche gère efficacement la désérialisation de données JSON complexes et structurées de manière incohérente en objets C# fortement typés.
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!