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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-12-31 10:16:14174ブラウズ

How Can I Handle Unknown Enum Values When Deserializing JSON?

不明な列挙値を使用した JSON の逆シリアル化

JSON データを解析するときは、提供された列挙値がコードベースで定義されている列挙値と一致しないシナリオを処理することが重要です。これは通常、サードパーティ API が時間の経過とともに新しい列挙値を導入するときに発生します。

解決策: カスタム JsonConverter

この問題に対処するには、カスタム JsonConverter を作成できます。

class TolerantEnumConverter : JsonConverter
{
    // ... Implementation ...
}

このコンバーターは、次のように逆シリアル化プロセスを簡素化します。ロジック:

  • JSON 値が既存の列挙値 (文字列または整数) と一致する場合、その値が割り当てられます。
  • null 許容列挙型の場合、値が一致しない場合は null を返します。
  • 列挙型に「Unknown」値が含まれている場合、その値が設定されます。 value.
  • それ以外の場合は、最初の列挙値が使用されます。

使用例:

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status { Ready, Set, Go }

string json = @"{ ""status"": ""SomethingElse"" }";

var status = JsonConvert.DeserializeObject<Status>(json); // Returns "Ready"

Null 許容列挙値と"未知"値:

不明な値を持つ null 許容列挙型を処理するには、列挙型定義に「Unknown」値を追加します。例:

[JsonConverter(typeof(TolerantEnumConverter))]
enum Color { Red, Yellow, Green, Unknown = 99 }

string colorJson = @"{ ""color"": ""Purple"" }";

var color = JsonConvert.DeserializeObject<Color?>(colorJson); // Returns null

結論:

ここで紹介するカスタム JsonConverter を利用すると、列挙値が時間の経過とともに変化する場合でも、JSON の逆シリアル化がスムーズに進行することを保証できます。エラーを防止し、データの整合性を維持します。

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

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