System.Text.Json용 사용자 정의 JSON 변환기를 개발할 때 Write
메서드의 기본 직렬화가 충분한 상황이 발생할 수 있습니다. 이를 달성하기 위해 몇 가지 접근 방식을 고려할 수 있습니다.
[JsonConverter]
속성이 특정 속성에 적용된 경우 JsonSerializer.Serialize(writer, person, options);
를 호출하면 해당 속성에 대한 기본 직렬화가 생성됩니다.
사용자 지정 변환기의 Write
메서드에서는 전달된 JsonSerializerOptions
의 복사본을 만들고 복사본의 Converters
목록에서 사용자 지정 변환기를 제거한 다음 수정된 옵션을 JsonSerializer.Serialize<T>(Utf8JsonWriter, T, JsonSerializerOptions);
Medium에 전달할 수 있습니다. 이 접근 방식은 재귀 유형으로 작업할 때 제한이 있습니다.
JsonConverterFactory
을 사용자 정의 변환기의 기본 클래스로 정의하여 사용자 정의 변환기 생성을 제어할 수 있습니다. 팩토리의 CreateConverter
메서드에서는 직렬화 및 역직렬화를 위해 수정된 옵션을 사용하는 중첩 DefaultConverter
을 만들 수 있습니다.
참고: 이 방법을 사용하면 스택 오버플로가 발생할 수 있습니다.
사용자 정의 값 유형이나 POCO에 JsonConverterFactory
을 적용하면 직렬화 중에 스택 오버플로가 발생할 수 있습니다.
다음 수정된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!