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

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

Barbara Streisand
Libérer: 2025-01-24 04:21:38
original
996 Les gens l'ont consulté

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

Désérialiser un tableau de valeurs de type mixte en données fortement typées

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.

Considérations clés

Il y a deux facteurs clés à prendre en compte lors de la désérialisation de ce type de données :

  1. Gestion des collections de joueurs : les données des joueurs sont indexées par nom d'utilisateur et contiennent un mélange de chaînes et d'entiers. Cela suggère qu'il est possible d'utiliser une structure de dictionnaire avec le nom d'utilisateur comme clé et une collection de valeurs représentant les données de chaque joueur.
  2. Propriétés du joueur sans nom : les données du joueur sont constituées d'une séquence spécifique de valeurs sans nom. Nous avons besoin d'un mécanisme pour attribuer ces valeurs aux propriétés de l'objet Player, en garantissant qu'elles correspondent aux propriétés correctes.

Implémentation du convertisseur personnalisé

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

Définition de la classe de joueur

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

Structure d'objet de niveau supérieur

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

Démo de désérialisation

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

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!

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