알 수 없는 Enum 값으로 인한 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를 활용하면 애플리케이션이 enum을 정상적으로 처리하도록 할 수 있습니다. JSON 역직렬화 중 값 불일치를 방지하여 불필요한 오류를 방지하고 데이터 무결성을 유지합니다.
위 내용은 일치하지 않는 열거형 값으로 인해 JSON 역직렬화 오류를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!