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
Barbara Streisandasal
2025-01-14 08:36:44548semak imbas

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>

Pendaftaran dan penggunaan penukar tersuai:

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

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>

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!

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