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>
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>
Autres consignes
DefaultConverterFactory
pour appliquer des convertisseurs personnalisés à des types de valeurs personnalisés ou des POCO peut provoquer un débordement de pile. 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!