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

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

Patricia Arquette
Patricia Arquette원래의
2025-01-14 07:54:45930검색

How to Use Custom Enum Value Names with System.Text.Json?

System.Text.Json에서 사용자 정의 열거형 값 이름 사용

JsonConverter 클래스를 사용하여 열거형 값에 대한 사용자 정의 이름을 지정할 수 있습니다. 방법은 다음과 같습니다.

  1. 사용자 정의 변환기 정의:
<code class="language-csharp">public class CustomEnumStringEnumConverter : JsonConverter<Enum>
{
    protected override Enum Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // 从JSON文本解析枚举名称
        var name = reader.GetString();

        // 获取枚举类型
        var enumType = typeToConvert;

        // 按名称查找枚举值
        Enum value;
        if (!Enum.TryParse(enumType, name, true, out value))
        {
            throw new JsonException("无效的枚举值: " + name);
        }

        return value;
    }

    protected override void Write(Utf8JsonWriter writer, Enum value, JsonSerializerOptions options)
    {
        // 获取枚举值的自定义名称
        var customName = GetCustomName(value);

        // 将自定义名称写入JSON文本
        writer.WriteStringValue(customName);
    }

    private string GetCustomName(Enum value)
    {
        // 获取枚举值的字段信息
        var fieldInfo = enumType.GetField(value.ToString());

        // 获取应用于该字段的自定义属性
        var attribute = fieldInfo.GetCustomAttribute<EnumMemberAttribute>();

        // 返回属性中的自定义名称,如果未指定则返回默认名称
        return attribute?.Value ?? value.ToString();
    }
}</code>
  1. JsonSerializerOptions를 사용하여 변환기 등록:
<code class="language-csharp">var options = new JsonSerializerOptions
{
    Converters = { new CustomEnumStringEnumConverter() }
};</code>
  1. EnumMember 속성 적용:

EnumMember 속성을 ​​사용하여 열거형 값을 장식하여 사용자 정의 이름을 지정합니다.

<code class="language-csharp">public enum Example
{
    [EnumMember(Value = "Trick-Or-Treat")]
    TrickOrTreat,
    // 其他枚举值
}</code>
  1. 직렬화 및 역직렬화:

이제 사용자 정의 JsonConverter를 사용하여 열거형을 직렬화 및 역직렬화할 수 있습니다.

<code class="language-csharp">// 序列化枚举值
var json = JsonSerializer.Serialize(value, options);

// 反序列化枚举值
var value = JsonSerializer.Deserialize<Enum>(json, options);</code>

지침:

  • 이 방법을 사용하려면 .NET Core 3.1 이상이 필요합니다.
  • 여러 열거 유형에 대해 사용자 지정 변환기를 사용해야 하는 경우 일반 변환기를 만들 수 있습니다.
  • 이 방법을 사용하면 직렬화 및 역직렬화 중에 열거형 값을 왕복하는 기능을 유지하면서 열거형 값에 대한 사용자 정의 이름을 지정할 수 있습니다.

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

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