> 백엔드 개발 > C++ > JSON 직렬화 중에 JsonProperty 속성을 선택적으로 무시하는 방법은 무엇입니까?

JSON 직렬화 중에 JsonProperty 속성을 선택적으로 무시하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-07 16:01:40
원래의
687명이 탐색했습니다.

How to Selectively Ignore JsonProperty Attributes During JSON Serialization?

JSON 직렬화 중 JsonProperty(PropertyName = "someName") 속성 무시

Json.Net은 직렬화 프로세스를 사용자 정의하기 위한 JsonProperty 속성을 제공하므로 개발자는 직렬화 중에 속성 이름을 지정할 수 있습니다. 그러나 일부 경우(예: 클라이언트가 브라우저인 경우) 로드를 줄이기 위해 더 짧은 속성 이름을 사용하면 클라이언트 코드에서 더 짧은 이름을 사용하는 데 문제가 발생할 수 있습니다.

이 문제를 해결하려면 사용자 정의 계약 파서를 사용하여 JsonProperty 속성을 선택적으로 무시할 수 있습니다. 방법은 다음과 같습니다.

<code class="language-csharp">public class LongNameContractResolver : DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        // 使用简短名称获取默认属性
        IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);

        // 将简短名称替换为原始属性名称
        foreach (var property in properties)
        {
            property.PropertyName = property.UnderlyingName;
        }

        return properties;
    }
}</code>
로그인 후 복사

이 파서는 먼저 JsonProperty 속성에 지정된 더 짧은 이름을 사용하여 속성 목록을 생성하는 CreateProperties 메서드를 재정의합니다. 그런 다음 각 속성을 반복하여 더 짧은 이름을 기본 속성 이름으로 바꿉니다.

이 파서를 사용하려면 JsonSerializerSettings의 계약 파서로 설정하세요.

<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ContractResolver = new LongNameContractResolver();</code>
로그인 후 복사

그런 다음 사용자 정의 설정을 사용하여 직렬화할 때 JsonProperty 속성을 선택적으로 무시할 수 있습니다.

<code class="language-csharp">// 如果 useLongNames 为 true,则忽略 JsonProperty 属性
if (useLongNames)
{
    settings.ContractResolver = new LongNameContractResolver();
}</code>
로그인 후 복사

이 솔루션을 사용하면 JsonProperty 속성이 무시되는 시기를 프로그래밍 방식으로 제어할 수 있으므로 클라이언트 유형이나 특정 조건에 따라 원하는 직렬화 동작을 얻을 수 있습니다.

위 내용은 JSON 직렬화 중에 JsonProperty 속성을 선택적으로 무시하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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