Maison > développement back-end > C++ > Comment conserver la sérialisation par défaut lors de l'utilisation d'un JsonConverter System.Text.Json personnalisé ?

Comment conserver la sérialisation par défaut lors de l'utilisation d'un JsonConverter System.Text.Json personnalisé ?

Patricia Arquette
Libérer: 2025-01-10 10:55:40
original
233 Les gens l'ont consulté

How to Preserve Default Serialization When Using a Custom System.Text.Json JsonConverter?

Implémenter la sérialisation par défaut dans le System.Text.Json JsonConverter personnalisé

Lors de la mise en œuvre d'un System.Text.Json.JsonConverter<T> personnalisé pour mettre à niveau le modèle de données, vous devrez peut-être remplacer la méthode Write(). Toutefois, dans certains cas, vous souhaiterez peut-être conserver le comportement de sérialisation par défaut. Pour y parvenir, vous pouvez utiliser les stratégies suivantes.

1. JsonConverter appliqué aux propriétés

Si un convertisseur personnalisé est appliqué à une propriété, le simple appel de Write() dans la méthode JsonSerializer.Serialize(writer, person, options); générera la sérialisation par défaut.

2. Convertisseurs ajoutés à la collection Convertisseurs

Dans ce cas vous pouvez modifier la collection Write() dans la méthode Converters par :

<code class="language-csharp">public override void Write(Utf8JsonWriter writer, Person person, JsonSerializerOptions options)
{
    // 复制传入的选项并移除自定义转换器。
    var modifiedOptions = options.CopyAndRemoveConverter(typeof(PersonConverter));
    JsonSerializer.Serialize(writer, person, modifiedOptions);
}</code>
Copier après la connexion

3. JsonConverter appliqué aux types de valeurs personnalisés ou POCO

Il n'existe actuellement aucune méthode intégrée pour générer une sérialisation par défaut pour ce scénario.

4. Convertisseur renvoyé par JsonConverterFactory

Pour désactiver l'utilisation d'une fabrique de convertisseurs dans une liste de convertisseurs, envisagez de créer un JsonConverterFactory qui renvoie un convertisseur personnalisé qui ignore la sérialisation lorsque la fabrique est appliquée.

Mise en œuvre améliorée

Dans l'exemple fourni, l'implémentation améliorée utilise DefaultConverterFactory<T>. Cette classe vous permet de mettre facilement en cache les options copiées dans les convertisseurs fabriqués. L'implémentation complète ressemble à ceci :

<code class="language-csharp">public sealed class PersonConverter : DefaultConverterFactory<Person>
{
    // ... 原问题的现有代码 ...
}

public abstract class DefaultConverterFactory<T> : JsonConverterFactory
{
    // ... 接受的答案中的现有代码 ...
}

public static class JsonSerializerExtensions
{
    // ... 接受的答案中的现有代码 ...
}</code>
Copier après la connexion

Autres consignes

  • L'utilisation de DefaultConverterFactory pour appliquer des convertisseurs personnalisés à des types de valeurs personnalisés ou des POCO peut provoquer un débordement de pile.
  • Le code modifié permet une sérialisation par défaut correcte dans l'exemple fourni.

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