Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyesuaikan Nama Nilai Enum dalam System.Text.Json?

Bagaimana untuk Menyesuaikan Nama Nilai Enum dalam System.Text.Json?

Patricia Arquette
Lepaskan: 2025-01-14 06:55:44
asal
312 orang telah melayarinya

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

System.Text.Json: Nama Nilai Enum Tersuai

System.Text.Json tidak menyediakan cara terbina dalam untuk menentukan tersuai nilai untuk ahli enum. Walau bagaimanapun, terdapat beberapa pilihan untuk mencapai ini:

Menggunakan JsonConverterFactory Tersuai:

Buat kelas penukar tersuai yang mewarisi daripada JsonConverterFactory dan melaksanakan kaedah CanConvert dan CreateConverter. Dalam CanConvert, semak sama ada jenis yang hendak ditukar ialah enum. Dalam CreateConverter, buat contoh JsonEnumConverter tersuai yang mengendalikan nilai tersuai.

Menggunakan Pustaka Pihak Ketiga:

Pustaka seperti Macross.Json.Extensions menyediakan penukar yang menyokong nama nilai enum tersuai. Pasang pustaka dan hiasi enum anda dengan [JsonConverter(typeof(JsonStringEnumMemberConverter))].

Mencipta Penukar Tersuai dan Kilang dalam .NET 6 atau Terdahulu:

In .NET 6 atau lebih awal, kilang penukar dan penukar tersuai diperlukan untuk enum pergi-balik dengan tersuai nama. Ini melibatkan pengendalian penghuraian nilai integer dan rentetan, menamakan semula komponen enum [Bendera] dan menukar enum semua jenis asas yang mungkin.

Menggunakan Penukar Enum Generik:

Penukar enum generik boleh dibuat untuk mengendalikan kedua-dua enum [Bendera] dan bukan [Bendera], dengan penggantian tersuai untuk penukaran nama jika perlu. Ini lebih melibatkan daripada menggunakan penukar khusus untuk setiap jenis.

Contoh Kod menggunakan Kilang Penukar Tersuai:

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);
    }
}
Salin selepas log masuk

Nota Tambahan:

  • Dalam .NET 6 dan lebih awal, JsonStringEnumConverter mengabaikan dasar penamaannya semasa penyahserikatan. Ini telah ditetapkan dalam .NET 7.
  • Dalam .NET Core 3.x, penukar tersuai mungkin tidak berfungsi seperti yang dikehendaki dengan enum [Bendera] di mana nilai individu dinamakan semula.
  • Dalam .NET 5, isu ini telah dibetulkan.
  • Untuk .NET 6 atau lebih awal, pendekatan kilang penukar penukar generik mungkin perlu.
  • Perpustakaan pihak ketiga seperti Macross.Json.Extensions memudahkan proses.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan