Какие исключения выбрасывает Newtonsoft.Json.DeserializeObject? Я хочу с ними справиться.
Какие исключения выбрасывает Newtonsoft.Json.DeserializeObject? Я хочу с ними справиться.
Ответы:
JSON.NET определяет следующие исключения:
JsonException
JsonReaderExceptionJsonSerializationExceptionJsonWriterExceptionJsonSchemaExceptionОшибки сериализации или десериализации обычно приводят к возникновению файла JsonSerializationException.
JsonSerializationException, но для уверенности придется спросить автора или заглянуть в исходный код ... В любом случае, вы можете просто поймать, JsonExceptionесли хотите быть уверенным, что ничего не пропустите, поскольку все JSON От него наследуются исключения .NET.
Обратите внимание, что документация по обработке ошибок Json.NET показывает стратегию для пользователя API по устранению ошибок путем обработки событий ошибок, а не прямого перехвата исключений. Это имеет смысл, если учесть, что, возможно, только один элемент в массиве может не десериализоваться, и вы можете решить эту проблему более детально, чем одно монолитное исключение для всего набора.
Этот ответ касается части вашего вопроса «хочу их обработать», не касаясь части «какие исключения». Как показано в другом ответе, все исключения Json.NET наследуются от класса JsonException , поэтому отловить это было бы неплохо. Однако кажется, что если вы действительно хотите понять, что вызвало возникновение исключения, вам нужно будет прочитать его 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.