首頁 > 後端開發 > C++ > 如何將自訂枚舉值名稱與 System.Text.Json 一起使用?

如何將自訂枚舉值名稱與 System.Text.Json 一起使用?

Patricia Arquette
發布: 2025-01-14 07:54:45
原創
933 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板