Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyesuaikan Nama Nilai Enum dalam 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 && 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); } }
Nota Tambahan:
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!