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

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

Barbara Streisand
Barbara Streisandオリジナル
2025-01-01 11:02:09729ブラウズ

How to Gracefully Handle Unknown Enum Values During JSON Deserialization?

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

JSON データを列挙型に逆シリアル化するとき、JSON プロパティに次のような状況が発生する可能性があります。既存の列挙値と一致しない値。デフォルトでは、これによりエラーが発生する可能性があります。

TolerantEnumConverter to the Rescue

これを適切に処理するには、TolerantEnumConverter というカスタム JsonConverter を使用できます。このコンバータは、一連のルールを定義することで、未知の列挙値を処理する柔軟なアプローチを提供します。

  1. JSON 値が既存の列挙値と一致する場合、その値が使用されます。
  2. 列挙値がnull 可能であり、JSON 値が null の場合、null に設定されます。
  3. 列挙型に「Unknown」という値がある場合、それが使用されます。
  4. それ以外の場合、列挙型の最初の値が使用されます。

実装の詳細

TolerantEnumConverter は文字列と整数の両方を処理しますJSON の値。大文字と小文字を区別しない文字列の比較、または列挙型値のセット内の存在に基づいて一致をチェックします。

使用例

TolerantEnumConverter を使用するには、列挙型プロパティに次の注釈を付けます。 [JsonConverter(typeof(TolerantEnumConverter))] 属性。以下に例を示します。

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status
{
    Ready = 1,
    Set = 2,
    Go = 3,
}

デモ アプリケーション

次のデモ アプリケーションは、TolerantEnumConverter を使用して null 非許容と null 許容の両方を処理する方法を示しています。 enums:

// Sample JSON data
string json = @"
{
    ""NonNullableStatusWithValidStringValue"" : ""Set"",
    ""NonNullableStatusWithInvalidStringValue"" : ""Blah"",
    ""NullableStatusWithValidStringValue"" : ""Go"",
    ""NullableStatusWithInvalidStringValue"" : ""Blah"",
}";

// Deserialize JSON data into Foo object
Foo foo = JsonConvert.DeserializeObject<Foo>(json, new JsonSerializerSettings
{
    Converters = { new TolerantEnumConverter() }
});

// Output the deserialized values
foreach (PropertyInfo prop in typeof(Foo).GetProperties())
{
    Console.WriteLine(prop.Name + ": " + (prop.GetValue(foo) ?? "(null)"));
}

出力:

NonNullableStatusWithValidStringValue: Set
NonNullableStatusWithInvalidStringValue: Ready
NullableStatusWithValidStringValue: Go
NullableStatusWithInvalidStringValue: (null)

結論

TolerantEnumConverter は、エラーが発生せずに JSON データを enum に逆シリアル化する便利な方法を提供します未知の値の場合。特定のニーズに合わせてカスタマイズ可能な動作を提供します。

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

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