[.net] Newtonsoft.Json.DeserializeObject가 던지는 예외는 무엇입니까?

Newtonsoft.Json.DeserializeObject가 던지는 예외는 무엇입니까? 나는 그들을 처리하고 싶다.

http://james.newtonking.com/json/help/?topic=html/M_Newtonsoft_Json_JsonConvert_DeserializeObject.htm#seeAlsoToggle



답변

JSON.NET은 다음 예외를 정의합니다.

  • JsonException
    • JsonReaderException
    • JsonSerializationException
    • JsonWriterException
    • JsonSchemaException

직렬화 또는 역 직렬화 오류는 일반적으로 JsonSerializationException.


답변

참고 문서 처리 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.


답변