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.
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é.
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.
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.
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.
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>
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!