JSON 逆シリアル化中の不明な列挙値の無視
JSON データを列挙型に逆シリアル化するとき、JSON プロパティに次のような状況が発生する可能性があります。既存の列挙値と一致しない値。デフォルトでは、これによりエラーが発生する可能性があります。
TolerantEnumConverter to the Rescue
これを適切に処理するには、TolerantEnumConverter というカスタム JsonConverter を使用できます。このコンバータは、一連のルールを定義することで、未知の列挙値を処理する柔軟なアプローチを提供します。
実装の詳細
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 サイトの他の関連記事を参照してください。