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.
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:
JsonStringEnumConverter
. 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>
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.
[Flags]
mungkin memerlukan JsonConverter
yang diubah suai. Lihat arahan dalam jawapan untuk mendapatkan butiran lanjut tentang mengendalikan situasi ini. JsonStringEnumConverter
akan mengabaikan JsonNamingPolicy
nya semasa penyahserikatan Isu ini telah dibetulkan dalam permintaan tarik 73348. [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!