ホームページ >バックエンド開発 >C++ >Json.netでのJSON逆シリアル化中に不明な列挙値を処理するにはどうすればよいですか?

Json.netでのJSON逆シリアル化中に不明な列挙値を処理するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-05 13:27:41928ブラウズ

How to Handle Unknown Enum Values During JSON Deserialization with Json.net?

JSON 逆シリアル化中の不明な列挙値の無視

問題:

JSON を使用した JSON 逆シリアル化。 JSON で不明な列挙値が検出された場合、net は例外をスローする可能性があります データ。この問題は、列挙型が現在のドキュメントに基づいて作成された場合に発生しますが、サードパーティ API によって後で新しい列挙値が追加されました。

解決策: Custom JsonConverter

この問題を解決するには、カスタム JsonConverter を使用できます。その仕組みは次のとおりです。

  • JSON 値が列挙型 (文字列または整数) と一致する場合、その値が使用されます。
  • 列挙型が null 許容の場合、値は null に設定されます。
  • 列挙型の値が「Unknown」の場合、それは
  • それ以外の場合は、列挙型の最初の値が使用されます。

コードの実装:

class TolerantEnumConverter : JsonConverter
{
    ... (Implementation from the provided answer)
}

使用法:

を適用します[JsonConverter(typeof(TolerantEnumConverter))] 属性を列挙型に設定して、逆シリアル化中にカスタム コンバーターを使用します:

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status
{
    ... (Enum values)
}

デモの例:

次のコード スニペットさまざまな列挙値と JSON を使用した TolerantEnumConverter の使用を示します。入力:

string json = @"
{
    ... (JSON data with valid and invalid enum values)
}";

Foo foo = JsonConvert.DeserializeObject<Foo>(json);

foreach (PropertyInfo prop in typeof(Foo).GetProperties())
{
    object val = prop.GetValue(foo, null);
    Console.WriteLine(prop.Name + ": " + 
                     (val == null ? "(null)" : val.ToString()));
}

出力:

コンソール出力には、値を「(null)」、「Unknown」に設定するなど、TolerantEnumConverter が不明な列挙値をどのように処理するかが示されます。 、または列挙型の最初の値を使用します。

以上がJson.netでのJSON逆シリアル化中に不明な列挙値を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。