Désérialisation du JSON imbriqué dans un dictionnaire imbriqué
Dans .NET Core 3.1, System.Text.Json fournit un moyen standard de désérialiser JSON. Par défaut, les objets JSON sont désérialisés en objets JsonElement, qui donnent accès à la structure de données JSON mais ne convertissent pas automatiquement les valeurs en leurs types C# correspondants.
Problème :
L'objectif est de désérialiser les objets JSON imbriqués dans Dictionary
Solution :
Pour y parvenir, un JsonConverter appelé ObjectAsPrimitiveConverter est nécessaire, car System.Text.Json ne fournit pas de fonctionnalités prêtes à l'emploi pour cette conversion de type spécifique.
ObjectAsPrimitiveConverter offre les fonctionnalités suivantes :
Conscience de la saisie désérialisation :
Gestion des nombres :
Gestion des objets :
Mise en œuvre :
public class ObjectAsPrimitiveConverter : JsonConverter<object> { // Configuration options FloatFormat FloatFormat { get; init; } UnknownNumberFormat UnknownNumberFormat { get; init; } ObjectFormat ObjectFormat { get; init; } public ObjectAsPrimitiveConverter() : this(FloatFormat.Double, UnknownNumberFormat.Error, ObjectFormat.Expando) { } public ObjectAsPrimitiveConverter( FloatFormat floatFormat, UnknownNumberFormat unknownNumberFormat, ObjectFormat objectFormat) { this.FloatFormat = floatFormat; this.UnknownNumberFormat = unknownNumberFormat; this.ObjectFormat = objectFormat; } // ... implementation details ... } public enum FloatFormat { Double, Decimal, } public enum UnknownNumberFormat { Error, JsonElement, } public enum ObjectFormat { Expando, Dictionary, }
Utilisation :
Pour désérialiser JSON en un objet dynamique (ou ExpandoObject si configuré) à l'aide de l'outil ObjectAsPrimitiveConverter, spécifiez le convertisseur dans JsonSerializerOptions comme ceci :
var options = new JsonSerializerOptions { Converters = { new ObjectAsPrimitiveConverter(floatFormat : FloatFormat.Double, unknownNumberFormat : UnknownNumberFormat.Error, objectFormat : ObjectFormat.Expando) }, WriteIndented = true, }; dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);
Remarques :
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!