Que exceções Newtonsoft.Json.DeserializeObject lança? Eu quero lidar com eles.
Que exceções Newtonsoft.Json.DeserializeObject lança? Eu quero lidar com eles.
Respostas:
JSON.NET define as seguintes exceções:
JsonException
JsonReaderException
JsonSerializationException
JsonWriterException
JsonSchemaException
Erros de serialização ou desserialização normalmente resultam em a JsonSerializationException
.
JsonSerializationException
, mas para ter certeza você teria que perguntar ao autor ou olhar o código-fonte ... De qualquer forma, você pode apenas pegar JsonException
se quiser ter certeza de não perder nada, já que todos os JSON As exceções do .NET são herdadas dele.
Observe que a documentação de tratamento de erros do Json.NET mostra uma estratégia para o usuário da API lidar com erros tratando de eventos de erro em vez de capturar exceções diretamente. Isso faz sentido quando você considera que talvez apenas um item em uma matriz pode falhar ao desserializar, e você pode querer lidar com isso de uma forma mais granular do que uma exceção monolítica para todo o conjunto.
Esta resposta aborda a parte "quero lidar com eles" de sua pergunta sem chegar à parte "quais exceções". Como mostra outra resposta, todas as exceções Json.NET herdam da classe JsonException , portanto, pegar isso seria um bom fail-safe. No entanto, parece que se você quiser realmente entender o que causou o lançamento de uma exceção, você precisará ler sua Message
propriedade, não manipular com base no Exception
tipo, pois os diferentes tipos parecem ser mais orientados para a ação que você está executando do que a categoria de erro. No código de exemplo a seguir, args.ErrorContext.Error
é uma instância de Exception
.
Exemplo de código da documentação:
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.