ホームページ > バックエンド開発 > C++ > System.Text.Json で列挙値の名前をカスタマイズする方法

System.Text.Json で列挙値の名前をカスタマイズする方法

Patricia Arquette
リリース: 2025-01-14 06:55:44
オリジナル
313 人が閲覧しました

How to Customize Enum Value Names in System.Text.Json?

System.Text.Json: カスタム列挙値名

System.Text.Json には、カスタムを指定する組み込みの方法が提供されていませんenum メンバーの値。ただし、これを実現するにはいくつかのオプションがあります。

カスタム JsonConverterFactory の使用:

JsonConverterFactory を継承し、CanConvert メソッドと CreateConverter メソッドを実装するカスタム コンバータ クラスを作成します。 CanConvert で、変換される型が enum であるかどうかを確認します。 CreateConverter で、カスタム値を処理するカスタマイズされた JsonEnumConverter インスタンスを作成します。

サードパーティ ライブラリの使用:

Macross.Json.Extensions などのライブラリは、以下をサポートするコンバータを提供します。カスタム列挙値の名前。ライブラリをインストールし、[JsonConverter(typeof(JsonStringEnumMemberConverter))] で列挙型を装飾します。

.NET 6 以前でのカスタム コンバーターとファクトリの作成:

In .NET 6 以前では、カスタム コンバータとコンバータ ファクトリが、カスタム コンバータと列挙型のラウンドトリップに必要です。名前。これには、整数および文字列値の解析の処理、[Flags] 列挙型コンポーネントの名前変更、およびすべての基礎となる型の列挙型の変換が含まれます。

汎用列挙型コンバータの使用:

カスタム列挙型を使用して、[Flags] 列挙型と非 [Flags] 列挙型の両方を処理する汎用列挙型コンバータを作成できます。必要に応じて、名前変換をオーバーライドします。これは、タイプごとに特定のコンバーターを使用するよりも複雑です。

カスタム コンバーター ファクトリを使用したコード例:

public class JsonEnumMemberStringEnumConverter : JsonConverterFactory
{
    public override bool CanConvert(Type typeToConvert) => baseConverter.CanConvert(typeToConvert);
    public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options)
    {
        var query = from field in typeToConvert.GetFields(BindingFlags.Public | BindingFlags.Static)
                    let attr = field.GetCustomAttribute<EnumMemberAttribute>()
                    where attr != null &amp;&amp; attr.Value != null
                    select (field.Name, attr.Value);
        var dictionary = query.ToDictionary(p => p.Item1, p => p.Item2);
        if (dictionary.Count > 0)
            return new JsonStringEnumConverter(new DictionaryLookupNamingPolicy(dictionary, namingPolicy), allowIntegerValues).CreateConverter(typeToConvert, options);
        else
            return baseConverter.CreateConverter(typeToConvert, options);
    }
}
ログイン後にコピー

追加メモ:

  • .NET 6 以前では、JsonStringEnumConverter は無視します逆シリアル化中の命名ポリシー。これは .NET 7 で修正されました。
  • .NET Core 3.x では、個々の値の名前が変更される [Flags] 列挙型ではカスタム コンバーターが期待通りに動作しない可能性があります。
  • .NET の場合5 では、この問題は修正されています。
  • .NET 6 以前の場合、汎用コンバーター コンバーター ファクトリ アプローチが次のようになります。必要です。
  • Macross.Json.Extensions のようなサードパーティ ライブラリにより、プロセスが簡素化されます。

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

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