Maison > développement back-end > C++ > Comment tirer parti de la sérialisation System.Text.Json par défaut dans un convertisseur JSON personnalisé ?

Comment tirer parti de la sérialisation System.Text.Json par défaut dans un convertisseur JSON personnalisé ?

Patricia Arquette
Libérer: 2025-01-09 22:57:41
original
493 Les gens l'ont consulté

How to Leverage Default System.Text.Json Serialization within a Custom JSON Converter?

Comment implémenter la sérialisation JSON par défaut dans le convertisseur System.Text.Json personnalisé ?

Lors du développement d'un convertisseur JSON personnalisé pour System.Text.Json, vous pouvez rencontrer des situations où la sérialisation par défaut dans la méthode Write est suffisante. Pour y parvenir, plusieurs approches peuvent être envisagées.

Options pour implémenter la sérialisation par défaut

Option 1 : Utiliser JsonConverter au niveau de la propriété

Si l'attribut [JsonConverter] est appliqué à une propriété spécifique, l'appel de JsonSerializer.Serialize(writer, person, options); générera une sérialisation par défaut pour cette propriété.

Option 2 : Copier et modifier JsonSerializerOptions

Dans la méthode Write d'un convertisseur personnalisé, vous pouvez créer une copie de ce qui a été transmis dans JsonSerializerOptions, supprimer le convertisseur personnalisé de la liste Converters de la copie et transmettre les options modifiées à JsonSerializer.Serialize<T>(Utf8JsonWriter, T, JsonSerializerOptions);Medium. Notez que cette approche présente des limites lorsque vous travaillez avec des types récursifs.

Option 3 : Utiliser une usine de conversion personnalisée

Vous pouvez contrôler la création d'un convertisseur personnalisé en définissant JsonConverterFactory comme classe de base pour un convertisseur personnalisé. Dans la méthode CreateConverter de l'usine, vous pouvez créer un DefaultConverter imbriqué qui utilise des options modifiées pour la sérialisation et la désérialisation.

Option 4 : appliquer la fabrique de convertisseurs à un JsonConverter au niveau de la propriété

Remarque : Cette méthode peut provoquer un débordement de pile.

Si JsonConverterFactory est appliqué à un type de valeur personnalisé ou POCO, un débordement de pile peut se produire lors de la sérialisation.

Exemple de mise en œuvre

Le PersonConverter modifié suivant montre comment implémenter la sérialisation par défaut à l'aide d'une fabrique de convertisseurs personnalisée :

<code class="language-csharp">public sealed class PersonConverter : DefaultConverterFactory<Person>
{
    ... // 使用修改后的选项实现Read和Write方法

    public override bool CanConvert(Type typeToConvert) => typeof(Person) == typeToConvert;

    public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options)
        => new DefaultConverter(options, this);
}</code>
Copier après la connexion

Dans la classe de base DefaultConverterFactory, la méthode d'extension CopyAndRemoveConverter est utilisée pour créer une copie modifiée de l'option, à l'exclusion des convertisseurs personnalisés.

Cette méthode offre une plus grande flexibilité que l'utilisation de différents JsonSerializerOptions pour la sérialisation et la désérialisation.

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