> 백엔드 개발 > C++ > System.Text.Json에서 열거형 값 이름을 사용자 정의하는 방법은 무엇입니까?

System.Text.Json에서 열거형 값 이름을 사용자 정의하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-14 06:55:44
원래의
312명이 탐색했습니다.

How to Customize Enum Value Names in System.Text.Json?

System.Text.Json: 사용자 정의 Enum 값 이름

System.Text.Json은 사용자 정의를 지정하는 기본 제공 방법을 제공하지 않습니다. 열거형 멤버의 값입니다. 그러나 이를 달성하기 위한 몇 가지 옵션이 있습니다.

사용자 정의 JsonConverterFactory 사용:

JsonConverterFactory에서 상속하고 CanConvert 및 CreateConverter 메서드를 구현하는 사용자 정의 변환기 클래스를 만듭니다. CanConvert에서 변환할 유형이 열거형인지 확인합니다. CreateConverter에서 사용자 정의 값을 처리하는 사용자 정의 JsonEnumConverter 인스턴스를 생성합니다.

타사 라이브러리 사용:

Macross.Json.Extensions와 같은 라이브러리는 다음을 지원하는 변환기를 제공합니다. 사용자 정의 열거형 값 이름. 라이브러리를 설치하고 [JsonConverter(typeof(JsonStringEnumMemberConverter))]로 열거형을 장식합니다.

.NET 6 이하에서 사용자 지정 변환기 및 팩터리 만들기:

In .NET 6 이하에서는 사용자 지정 이름을 사용하여 열거형을 왕복하려면 사용자 지정 변환기 및 변환기 팩터리가 필요합니다. 여기에는 정수 및 문자열 값의 구문 분석 처리, [Flags] 열거형 구성 요소의 이름 변경, 가능한 모든 기본 유형의 열거형 변환이 포함됩니다.

일반 열거형 변환기 사용:

필요한 경우 이름 변환을 위한 사용자 지정 재정의를 사용하여 [Flags] 및 비[Flags] 열거형을 모두 처리하기 위해 일반 열거형 변환기를 만들 수 있습니다. 이는 각 유형에 대해 특정 변환기를 사용하는 것보다 더 복잡합니다.

사용자 정의 변환기 팩토리를 사용하는 코드 예:

public class JsonEnumMemberStringEnumConverter : JsonConverterFactory
{
    public override bool CanConvert(Type typeToConvert) => baseConverter.CanConvert(typeToConvert);
    public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options)
    {
        var query = from field in typeToConvert.GetFields(BindingFlags.Public | BindingFlags.Static)
                    let attr = field.GetCustomAttribute<EnumMemberAttribute>()
                    where attr != null &amp;&amp; attr.Value != null
                    select (field.Name, attr.Value);
        var dictionary = query.ToDictionary(p => p.Item1, p => p.Item2);
        if (dictionary.Count > 0)
            return new JsonStringEnumConverter(new DictionaryLookupNamingPolicy(dictionary, namingPolicy), allowIntegerValues).CreateConverter(typeToConvert, options);
        else
            return baseConverter.CreateConverter(typeToConvert, options);
    }
}
로그인 후 복사

추가 참고 사항:

  • .NET 6 이하에서는 JsonStringEnumConverter가 무시합니다. 역직렬화 중 명명 정책. 이 문제는 .NET 7에서 수정되었습니다.
  • .NET Core 3.x에서는 개별 값의 이름이 바뀌는 [Flags] 열거형에서 사용자 지정 변환기가 원하는 대로 작동하지 않을 수 있습니다.
  • .NET에서 5부터 이 문제는 해결되었습니다.
  • .NET 6 이하의 경우 일반 변환기 변환기 팩토리 접근 방식은 다음과 같을 수 있습니다. 필요합니다.
  • Macross.Json.Extensions와 같은 타사 라이브러리는 프로세스를 단순화합니다.

위 내용은 System.Text.Json에서 열거형 값 이름을 사용자 정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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