Какие исключения выбрасывает Newtonsoft.Json.DeserializeObject? Я хочу с ними справиться.
Какие исключения выбрасывает Newtonsoft.Json.DeserializeObject? Я хочу с ними справиться.
Ответы:
JSON.NET определяет следующие исключения:
JsonException
JsonReaderException
JsonSerializationException
JsonWriterException
JsonSchemaException
Ошибки сериализации или десериализации обычно приводят к возникновению файла 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.