Désérialiser un tableau de valeurs avec un modèle fixe en une classe de données fortement typée
Question :
Il existe des défis lors de la désérialisation de données JSON dans un format spécifique en classes de données fortement typées. Les données contiennent un tableau de lecteurs avec des valeurs mixtes de chaîne et de nombres entiers, et la classe de lecteur est entièrement constituée de valeurs sans nom, dans un ordre fixe.
Solution :
Une combinaison de convertisseurs personnalisés et d'attributs de contrat de données permet une désérialisation efficace :
Créer un convertisseur personnalisé :
Implémentez un convertisseur personnalisé qui convertit les objets en tableaux :
<code class="language-c#">public class ObjectToArrayConverter<T> : JsonConverter { // 实现 WriteJson 和 ReadJson 函数 }</code>
Appliquer les propriétés du convertisseur personnalisé et du contrat de données au lecteur :
Appliquez un convertisseur personnalisé à la classe Player et utilisez l'attribut de contrat de données pour spécifier l'ordre de ses propriétés :
<code class="language-c#">[JsonConverter(typeof(ObjectToArrayConverter<Player>))] [DataContract] public class Player { [DataMember(Order = 1)] public int UniqueID { get; set; } [DataMember(Order = 2)] public string PlayerDescription { get; set; } }</code>
Modifier l'objet racine en dictionnaire :
Changez le type de l'attribut des joueurs dans l'objet racine en un dictionnaire, en utilisant les noms d'utilisateur des joueurs comme clés :
<code class="language-c#">public class ScoreboardResults { // ... public Dictionary<string, Player> players { get; set; } }</code>
Exemple :
L'exemple de code suivant illustre la désérialisation à l'aide de cette solution :
<code class="language-c#">using Newtonsoft.Json; var json = "{...}"; var results = JsonConvert.DeserializeObject<ScoreboardResults>(json);</code>
Autres consignes :
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!