Newtonsoft.Json.DeserializeObject가 던지는 예외는 무엇입니까? 나는 그들을 처리하고 싶다.
Newtonsoft.Json.DeserializeObject가 던지는 예외는 무엇입니까? 나는 그들을 처리하고 싶다.
답변:
JSON.NET은 다음 예외를 정의합니다.
JsonException
JsonReaderException
JsonSerializationException
JsonWriterException
JsonSchemaException
직렬화 또는 역 직렬화 오류는 일반적으로 JsonSerializationException
.
JsonSerializationException
하지만 저자에게 물어 보거나 소스 코드를 조사해야 할 것입니다 ... 어쨌든, JsonException
모든 JSON 이후 아무것도 놓치지 않으려면 잡을 수 있습니다. .NET 예외는 여기에서 상속됩니다.
참고 문서 처리 Json.NET의 오류 는 API 사용자 쇼에게 전략이 오류 이벤트를 처리하기보다는 직접 예외를 잡기하여 오류를 처리 할 수 있습니다. 이는 배열의 한 항목 만 역 직렬화에 실패 할 수 있으며 전체 집합에 대한 하나의 모 놀리 식 예외보다 더 세분화 된 방식으로 처리 할 수 있다고 생각할 때 의미가 있습니다.
이 답변은 "어떤 예외 사항"부분에 들어 가지 않고 질문의 "처리하고 싶은 부분"부분을 다룹니다. 또 다른 답변에서 알 수 있듯이 모든 Json.NET 예외는 JsonException Class 에서 상속 되므로 이것을 잡는 것은 좋은 안전 장치가 될 것입니다. 그러나 예외가 발생하는 원인을 실제로 이해 하려면 다른 유형이 수행하는 작업보다 더 지향적 인 것처럼 보이기 Message
때문에 Exception
유형을 기반으로 핸들이 아닌 속성 을 읽어야 할 것 같습니다. 오류 범주. 다음 예제 코드에서는의 args.ErrorContext.Error
인스턴스입니다 Exception
.
문서의 예제 코드 :
List<string> errors = new List<string>();
List<DateTime> c = JsonConvert.DeserializeObject<List<DateTime>>(@"[
'2009-09-09T00:00:00Z',
'I am not a date and will error!',
[
1
],
'1977-02-20T00:00:00Z',
null,
'2000-12-01T00:00:00Z'
]",
new JsonSerializerSettings
{
Error = delegate(object sender, ErrorEventArgs args)
{
errors.Add(args.ErrorContext.Error.Message);
args.ErrorContext.Handled = true;
},
Converters = { new IsoDateTimeConverter() }
});
// 2009-09-09T00:00:00Z
// 1977-02-20T00:00:00Z
// 2000-12-01T00:00:00Z
// The string was not recognized as a valid DateTime. There is a unknown word starting at index 0.
// Unexpected token parsing date. Expected String, got StartArray.
// Cannot convert null value to System.DateTime.