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

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

Barbara Streisand
Lepaskan: 2025-01-14 08:36:44
asal
545 orang telah melayarinya

How to Customize Enum Values in System.Text.Json?

Sesuaikan nilai penghitungan dalam System.Text.Json

Kesukaran: Menentukan nilai tersuai untuk nilai penghitungan

Dalam .NET 5 dan ke atas, kami tidak boleh terus menggunakan JsonPropertyName untuk menentukan nilai tersuai untuk nilai penghitungan seperti yang kami boleh dengan sifat biasa. Ciri ini tidak tersedia di luar kotak.

Kaedah 1: Sesuaikan JsonConverterFactory (disyorkan)

Untuk menyelesaikan masalah ini, kami memperkenalkan kilang JsonConverter (JsonEnumMemberStringEnumConverter) yang memanfaatkan JsonStringEnumConverter dan menyesuaikannya untuk menggunakan [EnumMember(Value="xxx")] tersuai untuk setiap jenis enum yang dianotasi dengan JsonNamingPolicy. Contohnya:

<code class="language-csharp">[EnumMember(Value = "Trick-Or-Treat")] // 自定义值
public enum Example { Trick, Treat, TrickOrTreat }</code>
Salin selepas log masuk

Pendaftaran dan penggunaan penukar tersuai:

<code class="language-csharp">var options = new JsonSerializerOptions
{
    Converters = { new JsonEnumMemberStringEnumConverter() },
    // ...
};
var json = JsonSerializer.Serialize(values, options);</code>
Salin selepas log masuk

Penukar ini mempunyai kelebihan berikut:

  • Pemprosesan perjalanan pergi dan balik yang lancar bagi enum dengan nilai tersuai.
  • Kekalkan nilai tersuai semasa penyahserikatan.
  • mengendalikan enum dengan nilai yang sama, konsisten dengan JsonStringEnumConverter.
  • Menyokong jenis penghitungan boleh ubah dan tidak berubah.

Kaedah 2: Pakej Macross.Json.Extensions

Sebagai alternatif, kami boleh menggunakan pakej Macross.Json.Extensions, yang menyediakan JsonStringEnumMemberConverter yang selepas pemasangan membolehkan kami menganotasi penghitungan seperti berikut:

<code class="language-csharp">[JsonConverter(typeof(System.Text.Json.Serialization.JsonStringEnumMemberConverter))]
public enum Example { Trick, Treat, [EnumMember(Value="Trick-Or-Treat")] TrickOrTreat }</code>
Salin selepas log masuk

Kaedah Tiga: Kilang Penukar Generik dengan Penggantian Tersuai (Lanjutan)

Jika anda memerlukan kawalan yang lebih halus, atau perlu menyokong enum dengan nilai tersuai dalam versi .NET lebih awal daripada 6.0, anda boleh mencipta kilang penukar generik dan penukar dari awal. Pendekatan ini lebih kompleks dan mungkin memerlukan backporting untuk versi terdahulu.

Nota

  • Jenis penghitungan dengan atribut [Flags] mungkin memerlukan JsonConverter yang diubah suai. Lihat arahan dalam jawapan untuk mendapatkan butiran lanjut tentang mengendalikan situasi ini.
  • Dalam versi .NET sebelum 6.0, JsonStringEnumConverter akan mengabaikan JsonNamingPolicynya semasa penyahserikatan Isu ini telah dibetulkan dalam permintaan tarik 73348.
  • Jika penghitungan anda mempunyai kedua-dua atribut [EnumMember] dan [JsonPropertyName], nilai [EnumMember] dalam penukar tersuai akan diutamakan.

Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan 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