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

Comment désérialiser un tableau JSON de valeurs de type mixte dans une classe C# fortement typée ?

Susan Sarandon
Libérer: 2025-01-24 04:11:08
original
384 Les gens l'ont consulté

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

Désérialisation de tableaux JSON avec des types de données mixtes en classes C#

Ce guide aborde les complexités de la désérialisation des données JSON où la structure présente des défis pour le mappage direct vers des classes C# fortement typées. Plus précisément, nous aborderons des scénarios impliquant des tableaux de types de données mixtes au sein d'une structure apparemment semblable à un dictionnaire.

Le problème :

Les structures JSON courantes peuvent présenter des données où :

  • Tableaux sans nom : Les tableaux de valeurs manquent de noms de propriétés explicites, ce qui rend la désérialisation directe difficile.
  • Types de données mixtes : Les tableaux contiennent des éléments de différents types (par exemple, des entiers, des chaînes).
  • Structure de type dictionnaire : La structure globale ressemble à un dictionnaire, mais les valeurs sont ces tableaux problématiques.

Solutions :

Plusieurs techniques permettent de surmonter ces obstacles :

1. Tirer parti de ObjectToArrayConverter :

Le ObjectToArrayConverter de Json.NET fournit un mécanisme puissant pour mapper un tableau de valeurs aux propriétés d'un objet C#. Cela nécessite un examen attentif de l'ordre de propriété.

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

La propriété JsonProperty de l'attribut Order est cruciale ; il garantit le mappage correct des éléments du tableau aux propriétés en fonction de leur séquence.

2. Restructuration de l'objet racine :

Une approche plus simple pourrait impliquer de restructurer l'objet racine pour représenter directement la nature des données, semblable à un dictionnaire.

<code class="language-csharp">public class ScoreboardResults
{
    // ... other properties
    public Dictionary<string, Player> Players { get; set; }
}</code>
Copier après la connexion

Cela simplifie considérablement la désérialisation, car les clés et valeurs du dictionnaire correspondent directement à la structure JSON.

3. Convertisseur personnalisé (avancé) :

Pour les scénarios complexes, un JsonConverter personnalisé offre le plus de contrôle. Cela permet une logique d'analyse complexe adaptée à la structure JSON spécifique.

Exemple (en utilisant ObjectToArrayConverter) :

<code class="language-csharp">// Sample JSON (replace with your actual JSON)
string jsonString = "...";

// Deserialize using ObjectToArrayConverter
var results = JsonConvert.DeserializeObject<ScoreboardResults>(jsonString);

// Access player data
foreach (var kvp in results.Players)
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value.UniqueID} - {kvp.Value.PlayerDescription}");
}</code>
Copier après la connexion

N'oubliez pas d'installer le package Newtonsoft.Json NuGet pour la fonctionnalité Json.NET. Choisissez la solution la mieux adaptée à votre structure et à votre complexité JSON. La restructuration de l'objet racine constitue souvent la solution la plus simple et la plus maintenable. ObjectToArrayConverter est un outil puissant pour les scénarios plus complexes nécessitant un contrôle précis de l'ordre des propriétés. Un convertisseur personnalisé ne doit être envisagé que lorsque les autres méthodes sont insuffisantes.

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