>백엔드 개발 >C++ >일치하지 않는 열거형 값으로 인해 JSON 역직렬화 오류를 처리하는 방법은 무엇입니까?

일치하지 않는 열거형 값으로 인해 JSON 역직렬화 오류를 처리하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-31 17:20:12184검색

How to Handle JSON Deserialization Errors with Mismatched Enum Values?

알 수 없는 Enum 값으로 인한 JSON 역직렬화 오류 극복

JSON 직렬화 및 역직렬화를 처리할 때 열거형 값이 JSON 속성에 제공된 문자열 값과 일치하지 않습니다. 이로 인해 역직렬화 중에 예외가 발생하여 애플리케이션 흐름이 중단될 수 있습니다.

이 문제를 해결하기 위해 열거형 값을 유연하게 처리하는 사용자 정의 JsonConverter를 활용할 수 있습니다. TolerantEnumConverter는 다양한 시나리오를 처리할 수 있으므로 필요에 따라 동작을 사용자 정의할 수 있습니다.

변환기 기능:

  • JSON 값이 열거형 문자열과 일치하는 경우 또는 정수인 경우 직접 사용됩니다.
  • null 허용 열거형의 경우 일치하는 항목이 없으면 null이 반환됩니다. 발견되었습니다.
  • 열거형에 "알 수 없음" 값이 있는 경우 다른 일치 항목이 없으면 사용됩니다.
  • 이 두 조건 중 어느 것도 충족되지 않으면 열거형의 첫 번째 값이 반환됩니다.

코드 예:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.