Maison >développement back-end >C++ >Comment puis-je désérialiser du JSON imbriqué en objets C# typés ?

Comment puis-je désérialiser du JSON imbriqué en objets C# typés ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-25 12:11:09475parcourir

How Can I Deserialize Nested JSON into Typed C# Objects?

Désérialisation JSON imbriquée avec des objets C# typés

Désérialisation du JSON imbriqué dans un dictionnaire plat en C#, l'utilisation de System.Text.Json peut faire en sorte que la plupart des propriétés deviennent du type JsonElement. Pour obtenir des types C# plus spécifiques basés sur les types de propriétés JSON, un JsonConverter personnalisé est requis.

ObjectAsPrimitiveConverter

Le code suivant fournit un JsonConverter personnalisé nommé ObjectAsPrimitiveConverter :

public class ObjectAsPrimitiveConverter : JsonConverter<object>
{
    // ... (converter implementation)
}

Convertisseur Configuration

Pour configurer le convertisseur, spécifiez le FloatFormat souhaité (double ou décimal), UnknownNumberFormat (erreur ou JsonElement) et ObjectFormat (ExpandoObject ou Dictionary) :

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

Désérialisation en objet

Vers désérialisez le JSON imbriqué en un objet (ou dynamique si vous utilisez ExpandoObject), utilisez :

dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);

Personnalisation

Le convertisseur peut être personnalisé pour prendre en charge différents types numériques et objets formats. De plus, il peut être étendu pour gérer plus gracieusement les numéros JSON non pris en charge.

Conclusion

En implémentant un JsonConverter personnalisé, vous pouvez obtenir une désérialisation spécifique au type des objets JSON imbriqués. dans une structure de données hiérarchique avec des types C# appropriés pour chaque propriété.

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