Maison > développement back-end > C++ > Comment désérialiser un tableau JSON de valeurs de type mixte en classes de données C# fortement typées ?

Comment désérialiser un tableau JSON de valeurs de type mixte en classes de données C# fortement typées ?

Patricia Arquette
Libérer: 2025-01-24 04:26:10
original
921 Les gens l'ont consulté

How to Deserialize a JSON Array of Mixed-Type Values into Strongly Typed C# Data Classes?

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 :

  1. 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>
    Copier après la connexion
  2. 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>
    Copier après la connexion
  3. 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>
    Copier après la connexion

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>
Copier après la connexion

Autres consignes :

  • Si vous utilisez des attributs de contrat de données, n'oubliez pas d'ajouter une référence à l'espace de noms System.Runtime.Serialization.
  • Cette solution suppose un schéma fixe avec des noms de propriétés connus. Pour les modes dynamiques, des techniques de désérialisation plus avancées peuvent être nécessaires.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal