System.Text.Json のカスタム JSON コンバーターを開発する場合、Write
メソッドのデフォルトのシリアル化で十分な状況が発生することがあります。これを達成するには、いくつかのアプローチが考えられます。
[JsonConverter]
属性が特定のプロパティに適用されている場合、JsonSerializer.Serialize(writer, person, options);
を呼び出すと、そのプロパティのデフォルトのシリアル化が生成されます。
カスタム コンバーターの Write
メソッドでは、渡された JsonSerializerOptions
のコピーを作成し、コピーの Converters
リストからカスタム コンバーターを削除し、変更したオプションを JsonSerializer.Serialize<T>(Utf8JsonWriter, T, JsonSerializerOptions);
Medium に渡すことができます。再帰型を使用する場合、このアプローチには制限があることに注意してください。
JsonConverterFactory
をカスタム コンバーターの基本クラスとして定義することで、カスタム コンバーターの作成を制御できます。ファクトリの CreateConverter
メソッドでは、シリアル化と逆シリアル化に変更されたオプションを使用するネストされた DefaultConverter
を作成できます。
注: このメソッドはスタック オーバーフローを引き起こす可能性があります。
JsonConverterFactory
がカスタム値型または POCO に適用される場合、シリアル化中にスタック オーバーフローが発生する可能性があります。
次の変更された PersonConverter
は、カスタム コンバーター ファクトリを使用してデフォルトのシリアル化を実装する方法を示しています。
<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>
基本クラスでは、DefaultConverterFactory
拡張メソッドを使用して、カスタム コンバーターを除く、オプションの変更されたコピーが作成されます。 CopyAndRemoveConverter
を使用するよりも柔軟性が高くなります。 JsonSerializerOptions
以上がカスタム JSON コンバーター内でデフォルトの System.Text.Json シリアル化を利用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。