ホームページ > バックエンド開発 > C++ > System.Text.Json の列挙値をカスタマイズするにはどうすればよいですか?

System.Text.Json の列挙値をカスタマイズするにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-14 08:36:44
オリジナル
545 人が閲覧しました

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

System.Text.Json の列挙値をカスタマイズします

難易度: 列挙値のカスタム値の指定

.NET 5 以降では、通常のプロパティのように JsonPropertyName を直接使用して列挙値のカスタム値を指定することはできません。この機能は、そのままでは使用できません。

方法 1: JsonConverterFactory をカスタマイズする (推奨)

この問題を解決するために、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 と一貫して同じ値の列挙型を処理します。
  • 変更可能および不変更の列挙型をサポートします。

方法 2: Macross.Json.Extensions パッケージ

代わりに、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>
ログイン後にコピー
方法 3: カスタム オーバーライドを使用した汎用コンバーター ファクトリ (上級)

より細かい制御が必要な場合、または 6.0 より前のバージョンの .NET でカスタム値を含む列挙型をサポートする必要がある場合は、汎用コンバーター ファクトリとコンバーターを最初から作成できます。このアプローチはより複雑であり、以前のバージョンのバックポートが必要になる場合があります。

メモ

    属性を持つ
  • 列挙型には、変更された[Flags]が必要な場合があります。この状況への対処方法の詳細については、応答内の指示を参照してください。 JsonConverter
  • 6.0 より前の .NET バージョンでは、
  • は逆シリアル化中に JsonStringEnumConverter を無視していました。この問題はプル リクエスト 73348 で修正されました。 JsonNamingPolicy
  • 列挙に
  • [EnumMember] の両方の属性がある場合、カスタム コンバーターの [JsonPropertyName] の値が優先されます。 [EnumMember]

以上がSystem.Text.Json の列挙値をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート