Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menggunakan Nama Nilai Enum Tersuai dengan System.Text.Json?

Bagaimana untuk Menggunakan Nama Nilai Enum Tersuai dengan System.Text.Json?

Patricia Arquette
Patricia Arquetteasal
2025-01-14 07:54:45930semak imbas

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

Gunakan nama nilai enum tersuai dalam System.Text.Json

Anda boleh menggunakan kelas JsonConverter untuk menentukan nama tersuai untuk nilai penghitungan. Begini caranya:

  1. Tentukan penukar tersuai:
<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. Daftar penukar menggunakan JsonSerializerOptions:
<code class="language-csharp">var options = new JsonSerializerOptions
{
    Converters = { new CustomEnumStringEnumConverter() }
};</code>
  1. Gunakan atribut EnumMember:

Gunakan atribut EnumMember untuk menghiasi nilai penghitungan untuk menentukan nama tersuai:

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

Anda kini boleh mensiri dan menyahsiri enum menggunakan JsonConverter tersuai:

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

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

Arahan:

  • Kaedah ini memerlukan .NET Core 3.1 atau lebih tinggi.
  • Jika anda perlu menggunakan penukar tersuai untuk berbilang jenis penghitungan, anda boleh membuat penukar generik.
  • Kaedah ini membolehkan anda menentukan nama tersuai untuk nilai penghitungan sambil mengekalkan keupayaan untuk pergi balik nilai penghitungan semasa bersiri dan penyahseririan.

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Nama Nilai Enum Tersuai dengan System.Text.Json?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn