デフォルトの動作を維持しながら System.Text.Json シリアル化をカスタマイズします
質問:
データ モデルのアップグレードのためにカスタム System.Text.Json.JsonConverter を実装する場合、他のシリアル化オプションに影響を与えずに、Write() メソッドのデフォルトのシリアル化動作を維持するにはどうすればよいですか?
答え:
カスタム System.Text.Json.JsonConverter の Write() メソッドでデフォルトのシリアル化動作を保持するには、次の戦略を使用できます:
オプション 1: 属性で [JsonConverter] を使用します
オプション 2: コンバーター コレクションを変更する
オプション 3: DefaultConverterFactory を実装する
制限事項:
例:
<code class="language-csharp">public sealed class PersonConverter : DefaultConverterFactory<Person> { public override Person Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions modifiedOptions) { // 自定义读取实现 } } public abstract class DefaultConverterFactory<T> : JsonConverterFactory { public override bool CanConvert(Type typeToConvert) => typeof(T) == typeToConvert; public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) { return new DefaultConverter(options, this); } } public sealed class DefaultConverter : JsonConverter<Person> { public override void Write(Utf8JsonWriter writer, Person value, JsonSerializerOptions modifiedOptions) { // 调用默认的 Write 实现 JsonSerializer.Serialize(writer, value, modifiedOptions); } }</code>
以上がカスタム JsonConverter を実装するときにデフォルトの System.Text.Json シリアル化動作を保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。