Json.Net을 사용한 C # 열거 형 역 직렬화 : 값을 형식으로 변환하는 동안 오류가 발생했습니다.

미나 새미

일부 JSON API를 직렬화 / 역 직렬화하기 위해 Json.NET을 사용하고 있습니다.

API 응답에는 애플리케이션에 정의 된 Enum에 매핑되는 정수 값이 있습니다.

열거 형은 다음과 같습니다.

public enum MyEnum
    {
        Type1,
        Type2,
        Type3
}

json API 응답에는 다음이 있습니다.

{
        "Name": "abc",
        "MyEnumValue":"Type1"
}

때때로 API는 다음과 같이 내 열거 형에 정의되지 않은 MyEnumValue 필드의 값을 반환합니다.

{
            "Name": "abc",
            "MyEnumValue":"Type4"
    }

예외가 발생합니다.

"Type4"값을 'MyEnum'유형으로 변환하는 동안 오류가 발생했습니다.

응용 프로그램 충돌을 피하기 위해 기본값이나 무언가를 할당하여이 오류를 처리하는 방법이 있습니까?

일리야 디 모프

다음과 같은 json 문자열이 있다고 가정 해 보겠습니다.

[
    {
        "Name": "abc",
        "MyEnumValue": "Type1"
    },
    {
        "Name": "abcd",
        "MyEnumValue": "Type2"
    },
    {
        "Name": "abcde",
        "MyEnumValue": "Type3"
    }    ,
    {
        "Name": "abcdef",
        "MyEnumValue": "Type4"
    }
]

및 다음 클래스 및 열거 형 :

public class MyClass
{
    public string Name { get; set; }

    public MyEnum MyEnumValue { get; set; }
}

public enum MyEnum
{
    Type1,
    Type2,
    Type3
}

알 수 있듯이 json 문자열 배열에는 항목 (마지막 항목)이 포함되어 있으며 MyEnum. 역 직렬화 오류를 방지하려면 다음 코드 조각을 사용할 수 있습니다.

static void Main(string[] args)
{         
    var serializationSettings = new JsonSerializerSettings
    {
        Error = HandleDeserializationError
    };

    var lst = JsonConvert.DeserializeObject<List<MyClass>>(jsonStr, serializationSettings);
}

public static void HandleDeserializationError(object sender, ErrorEventArgs errorArgs)
{
    errorArgs.ErrorContext.Handled = true;
    var currentObj = errorArgs.CurrentObject as MyClass;

    if (currentObj == null) return;
    currentObj.MyEnumValue = MyEnum.Type2;            
}

여기서 jsonStr변수는 위에 게시 된 json 문자열입니다. 위의 코드 샘플에서 MyEnumValue올바르게 해석 할 수없는 경우 기본값으로 설정됩니다 Type2.

예 : https://dotnetfiddle.net/WKd2Lt

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관