일부 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
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다