> 백엔드 개발 > C++ > System.Text.Json에서 직렬화 계약을 어떻게 사용자 지정할 수 있나요?

System.Text.Json에서 직렬화 계약을 어떻게 사용자 지정할 수 있나요?

Barbara Streisand
풀어 주다: 2025-01-03 11:45:40
원래의
693명이 탐색했습니다.

How Can I Customize Serialization Contracts in System.Text.Json?

System.Text.Json에서 직렬화 계약 사용자 정의

새로운 System.Text.Json API는 직렬화 계약을 사용자 정의하는 기능을 제공합니다. Newtonsoft의 IContractResolver와 유사한 기능.

계약 사용자 정의 .NET 7

.NET 7에서는 IJsonTypeInfoResolver 인터페이스를 통해 계약 사용자 정의가 가능합니다. 이 인터페이스를 사용하면 개발자는 지정된 유형 및 JsonSerializerOptions 조합에 대해 구성된 JsonTypeInfo 인스턴스를 반환하는 사용자 정의 해석기를 생성할 수 있습니다.

사용자 정의 해석기 생성

사용자 정의 해석기를 생성하는 한 가지 방법은 다음과 같습니다. DefaultJsonTypeInfoResolver를 서브클래싱하고 GetTypeInfo(Type, JsonSerializerOptions) 메서드를 재정의합니다. 또는 Action DefaultJsonTypeInfoResolver.Modifiers 컬렉션에 추가하여 생성 후 기본 JsonTypeInfo를 수정합니다.

예: 선택적 필드 직렬화

System.Text에서 SelectiveSerializer 클래스의 기능을 복제합니다. Json의 경우 다음과 유사한 수정자 작업을 사용할 수 있습니다. 다음:

resolver.Modifiers.Add(typeInfo =>
{
    if (typeInfo.Kind == JsonTypeInfoKind.Object)
    {
        foreach (var property in typeInfo.Properties)
        {
            if (property.GetMemberName() is {} name && !membersToSerializeSet.Contains(name))
                property.ShouldSerialize = static (obj, value) => false;
        }
    }
});
로그인 후 복사

이 수정자는 지정된 필드 이름과 일치하는 속성을 확인하고 ShouldSerialize 속성을 false로 설정하여 직렬화에서 제외합니다.

분석기 설정

사용자 정의 리졸버가 생성되면 다음을 통해 설정할 수 있습니다. JsonSerializerOptions.TypeInfoResolver 속성. 예:

var options = new JsonSerializerOptions
{
    TypeInfoResolver = new DefaultJsonTypeInfoResolver()
        .SerializeSelectedFields("FirstName,Email,Id"),
    // Other options as required
};
로그인 후 복사

추가 참고 사항

  • PropertyNamePolicy 및 WriteIndented를 설정하여 속성 이름 지정 및 들여쓰기를 사용자 정의할 수 있습니다.
  • JsonPropertyInfo. ShouldSerialize는 다음의 조건부 직렬화에 사용될 수 있습니다.
  • System.Text.Json은 기본적으로 대소문자를 구분하므로 선택한 필드를 필터링할 때 대소문자 구분 비교를 사용하는 것이 중요합니다.

위 내용은 System.Text.Json에서 직렬화 계약을 어떻게 사용자 지정할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿