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

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

Linda Hamilton
Linda Hamiltonoriginal
2025-01-24 04:06:09556parcourir

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.

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

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!

Déclaration:
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