不明な列挙値による JSON 逆シリアル化エラーの克服
JSON のシリアル化と逆シリアル化を扱う場合、列挙値が異なる状況に遭遇することは珍しくありません。 JSON プロパティで指定された文字列値と一致しません。これにより、逆シリアル化中に例外がスローされ、アプリケーションのフローが中断される可能性があります。
この課題に対処するには、列挙値を柔軟に処理できるカスタム JsonConverter を利用できます。 TolerantEnumConverter はさまざまなシナリオを処理でき、ニーズに基づいて動作をカスタマイズできます。
コンバーターの機能:
コード例:
class TolerantEnumConverter : JsonConverter { // Handle deserialization for enum types public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { // Get the underlying type for nullable types Type enumType = IsNullableType(objectType) ? Nullable.GetUnderlyingType(objectType) : objectType; // Attempt to match the JSON value to an enum value string[] names = Enum.GetNames(enumType); string enumText = reader.Value.ToString(); string match = names .Where(n => string.Equals(n, enumText, StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(); if (match != null) { return Enum.Parse(enumType, match); } // Handle nullable types if (IsNullableType(objectType)) { return null; } // Handle enums with an "Unknown" value string defaultName = names .Where(n => string.Equals(n, "Unknown", StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(); return Enum.Parse(enumType, defaultName ?? names.First()); } }
使用法:
コンバーターを使用するには、列挙プロパティを [JsonConverter] 属性で装飾します:
[JsonConverter(typeof(TolerantEnumConverter))] enum Status { Ready = 1, Set = 2, Go = 3 }
TolerantEnumConverter を活用すると、アプリケーションが列挙値を適切に処理できるようになります。 JSON 逆シリアル化中の不一致を防止し、不要なエラーを防ぎ、データの整合性を維持します。
以上が列挙値が一致しない場合の JSON 逆シリアル化エラーを処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。