Maison >développement back-end >C++ >Comment désérialiser un JSON imbriqué en un dictionnaire d'objets imbriqués avec les types C# appropriés à l'aide de System.Text.Json ?

Comment désérialiser un JSON imbriqué en un dictionnaire d'objets imbriqués avec les types C# appropriés à l'aide de System.Text.Json ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-25 02:40:17956parcourir

How to Deserialize Nested JSON to a Nested Dictionary of Objects with Proper C# Types Using System.Text.Json?

Désérialisation du JSON imbriqué en dictionnaire d'objets imbriqué avec les types C# appropriés

En C# .Net Core 3.1 à l'aide de System.Text.Json, désérialisation Objets JSON imbriqués dans Dictionary peut faire en sorte que chaque objet soit un JsonElement. Cependant, nous pouvons personnaliser le processus de désérialisation pour obtenir les types C# appropriés pour chaque type de propriété JSON :

JsonConverter personnalisé : ObjectAsPrimitiveConverter

Comme System.Text.Json manque de fonctionnalités intégrées. pour prendre en charge la désérialisation du JSON de forme libre en types primitifs, nous avons besoin d'un JsonConverter personnalisé, ObjectAsPrimitiveConverter, qui fournit les fonctionnalités suivantes :

  • Convertir la chaîne : Propriétés de la chaîne JSON en chaîne C#
  • Convertir le numéro : Propriétés du numéro JSON en C# int/double
  • Convertir l'objet : Propriétés de l'objet JSON en dictionnaire

Implémentation du code :

public class ObjectAsPrimitiveConverter : JsonConverter<object>
{
    // Configure converter settings (float format, unknown number handling, object format)
    ...

    public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
    {
        // Handle custom serialization if needed
    }

    public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // Handle custom deserialization based on token type
    }
}

Configuration et utilisation :

Pour utilisez le convertisseur personnalisé, configurez vos JsonSerializerOptions avec le ObjectAsPrimitiveConverter et spécifiez les paramètres souhaités :

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

// Deserialize to object or dynamic
dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);

Remarques :

  • Le Le convertisseur gère les cas extrêmes tels que les nombres avec une précision arbitraire, qui peuvent ne pas correspondre aux types C# primitifs. Il fournit des options de gestion des erreurs ou de renvoi d'un JsonElement pour de tels nombres.
  • Vous pouvez configurer le convertisseur pour utiliser différents formats flottants (double/décimal) et représentations d'objets (Dictionnaire ou ExpandoObject).
  • Un violon de démonstration est disponible pour référence.

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