>백엔드 개발 >C++ >System.Text.Json은 Newtonsoft의 IContractResolver처럼 선택적 직렬화를 달성할 수 있습니까?

System.Text.Json은 Newtonsoft의 IContractResolver처럼 선택적 직렬화를 달성할 수 있습니까?

DDD
DDD원래의
2025-01-04 07:57:41811검색

Can System.Text.Json Achieve Selective Serialization Like Newtonsoft's IContractResolver?

System.Text.Json이 IContractResolver와 같은 선택적 직렬화를 구현할 수 있습니까?

새로운 System.Text.Json 네임스페이스에는 Newtonsoft의 네임스페이스와 완전히 동일한 것이 부족합니다. IContractResolver. 그러나 .NET 7에는 유사한 기능을 제공하는 계약 사용자 정의가 도입되었습니다.

.NET 7의 계약 사용자 정의

계약 사용자 정의를 통해 사용자는 IJsonTypeInfoResolver를 사용하여 JSON 직렬화 메타데이터를 사용자 정의할 수 있습니다. 인터페이스. 이 인터페이스를 구현함으로써 개발자는 자체 계약 확인자를 생성하여 직렬화할 속성을 지정할 수 있습니다.

사용자 지정 계약 확인자 생성

선택적으로 사용자 지정 계약 확인자를 생성하려면 필드를 직렬화하려면 다음 단계를 수행할 수 있습니다.

  1. 유창한 확장 방법 정의 DefaultJsonTypeInfoResolver를 수정하려면:

    public static DefaultJsonTypeInfoResolver SerializeSelectedFields(this DefaultJsonTypeInfoResolver resolver, IEnumerable<string> membersToSerialize);
  2. JsonSerializerOptions에서 TypeInfoResolver를 설정합니다.

    var options = new JsonSerializerOptions
    {
        TypeInfoResolver = new DefaultJsonTypeInfoResolver()
            .SerializeSelectedFields("FirstName,Email,Id"),
        ...
    };

더 다음 코드는 계약 사용자 정의를 사용하여 "FirstName", "Email" 및 "Id" 속성을 선택적으로 직렬화하는 방법을 보여줍니다.

var options = new JsonSerializerOptions
{
    TypeInfoResolver = new DefaultJsonTypeInfoResolver()
        .SerializeSelectedFields("FirstName,Email,Id"),
    ...
};

// Serialize the object
var json = JsonSerializer.Serialize(obj, options);

추가 참고 사항

  • 로캘 불변 문자열 논리를 사용하여 직렬화 메타데이터를 구성합니다.
  • System.Text.Json은 기본적으로 대소문자를 구분하므로 속성 이름을 대소문자를 구분하여 일치시켜야 할 수도 있습니다.

위 내용은 System.Text.Json은 Newtonsoft의 IContractResolver처럼 선택적 직렬화를 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.