Maison > développement back-end > C++ > Comment désérialiser un JSON imbriqué en un dictionnaire imbriqué en C# ?

Comment désérialiser un JSON imbriqué en un dictionnaire imbriqué en C# ?

Susan Sarandon
Libérer: 2024-12-29 20:10:20
original
692 Les gens l'ont consulté

How to Deserialize Nested JSON to a Nested Dictionary in C#?

Désérialisation du JSON imbriqué en dictionnaire imbriqué en C

Lorsque vous travaillez avec des objets JSON imbriqués, vous souhaiterez peut-être les désérialiser dans un dictionnaire où chaque paire clé-valeur correspond à une paire propriété-valeur dans l'objet JSON. Cependant, par défaut, System.Text.Json désérialise tous les objets en objets JsonElement, qui peuvent ne pas fournir les types C# souhaités.

JsonConverter personnalisé

Pour obtenir les types C# appropriés, vous devez créer un JsonConverter personnalisé. Le convertisseur suivant gérera tous les types de valeurs JSON et les convertira en leurs types C# correspondants :

public class ObjectAsPrimitiveConverter : JsonConverter<object>
{
    ...

    public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        switch (reader.TokenType)
        {
            // Handle null, boolean, string, and number types.

            case JsonTokenType.StartArray:
                // Handle arrays.

            case JsonTokenType.StartObject:
                // Handle objects.

            default:
                throw new JsonException("Unknown token");
        }
    }
}
Copier après la connexion

Utilisation du convertisseur

Pour utiliser le convertisseur personnalisé, spécifiez-le dans vos options de désérialisation :

var options = new JsonSerializerOptions
{
    Converters = { new ObjectAsPrimitiveConverter() },
};

dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);
Copier après la connexion

Notes

  • JSON peut représenter des nombres avec une précision et une ampleur arbitraires, tandis que .Net les types numériques primitifs ont des limites. Vous pouvez configurer si les nombres non pris en charge sont renvoyés sous forme de JsonElements ou si des exceptions sont levées.
  • Vous pouvez personnaliser le convertisseur pour renvoyer des nombres doubles ou décimaux pour les nombres à virgule flottante et Dictionary ou ExpandoObject pour les objets JSON en fonction de vos préférences.

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