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
Susan Sarandonoriginal
2024-12-29 20:10:20709parcourir

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");
        }
    }
}

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);

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!

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