.NET 5 以降では、通常のプロパティのように JsonPropertyName
を直接使用して列挙値のカスタム値を指定することはできません。この機能は、そのままでは使用できません。
この問題を解決するために、JsonEnumMemberStringEnumConverter
を活用する JsonConverter ファクトリ (JsonStringEnumConverter
) を導入し、[EnumMember(Value="xxx")]
の注釈が付けられた列挙型ごとにカスタム JsonNamingPolicy
を使用するように調整しました。例:
<code class="language-csharp">[EnumMember(Value = "Trick-Or-Treat")] // 自定义值 public enum Example { Trick, Treat, TrickOrTreat }</code>
カスタムコンバーターの登録と使用法:
<code class="language-csharp">var options = new JsonSerializerOptions { Converters = { new JsonEnumMemberStringEnumConverter() }, // ... }; var json = JsonSerializer.Serialize(values, options);</code>
このコンバータには次の利点があります:
JsonStringEnumConverter
と一貫して同じ値の列挙型を処理します。 代わりに、Macross.Json.Extensions
パッケージを使用することもできます。このパッケージは、インストール後に次のように列挙に注釈を付けることができる JsonStringEnumMemberConverter
を提供します。
<code class="language-csharp">[JsonConverter(typeof(System.Text.Json.Serialization.JsonStringEnumMemberConverter))] public enum Example { Trick, Treat, [EnumMember(Value="Trick-Or-Treat")] TrickOrTreat }</code>
メモ
[Flags]
が必要な場合があります。この状況への対処方法の詳細については、応答内の指示を参照してください。 JsonConverter
JsonStringEnumConverter
を無視していました。この問題はプル リクエスト 73348 で修正されました。 JsonNamingPolicy
[EnumMember]
の両方の属性がある場合、カスタム コンバーターの [JsonPropertyName]
の値が優先されます。 [EnumMember]
以上がSystem.Text.Json の列挙値をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。