Lorsque vous traitez des données JSON avec un schéma spécifique, les désérialiser en classes de données fortement typées peut améliorer la maintenabilité et la clarté du code. Cette question explore comment désérialiser ces données lorsque le tableau contient des valeurs de type mixte, notamment des entiers et des chaînes.
Il y a deux facteurs clés à prendre en compte lors de la désérialisation de ce type de données :
Pour résoudre ces problèmes, nous pouvons implémenter un convertisseur de désérialisation personnalisé. Ce convertisseur est implémenté en C#, en utilisant la classe ObjectToArrayConverter<T>
dans Newtonsoft.Json :
<code class="language-csharp">public class ObjectToArrayConverter<T> : JsonConverter { // ... (为简洁起见,省略实现细节) }</code>
Ensuite, nous définissons la classe Player et utilisons des propriétés annotées pour spécifier l'ordre dans lequel elle est désérialisée :
<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; } // ... (根据需要添加其他属性) }</code>
Enfin, la classe ScoreboardResults
de niveau supérieur doit être ajustée pour représenter les données des joueurs sous la forme d'un dictionnaire avec les noms d'utilisateur comme clés :
<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>
Grâce à des convertisseurs personnalisés et à des propriétés annotées, nous pouvons désormais désérialiser les données JSON en objets fortement typés :
<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>
résultat sera un ScoreboardResults
objet rempli contenant un dictionnaire de Player
objets, chacun contenant les valeurs attendues dans leurs propriétés respectives.
Cette sortie révisée conserve l'image originale et fournit une explication plus concise et techniquement précise du processus de désérialisation JSON. Les exemples de code sont également améliorés pour plus de clarté.
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!