Welche Ausnahmen wirft Newtonsoft.Json.DeserializeObject? Ich möchte damit umgehen.
Welche Ausnahmen wirft Newtonsoft.Json.DeserializeObject? Ich möchte damit umgehen.
Antworten:
JSON.NET definiert die folgenden Ausnahmen:
JsonException
JsonReaderException
JsonSerializationException
JsonWriterException
JsonSchemaException
Serialisierungs- oder Deserialisierungsfehler führen normalerweise zu a JsonSerializationException
.
JsonSerializationException
, aber um sicher zu sein, müsstest du den Autor fragen oder in den Quellcode schauen ... Wie auch immer, du kannst einfach fangen, JsonException
wenn du sicher sein willst, nichts zu verpassen, da alle JSON .NET-Ausnahmen erben davon.
Beachten Sie, dass die Fehlerbehandlungsdokumentation von Json.NET eine Strategie für den API-Benutzer zeigt, mit Fehlern umzugehen, indem Fehlerereignisse behandelt werden, anstatt Ausnahmen direkt abzufangen. Dies ist sinnvoll, wenn Sie bedenken, dass möglicherweise nur ein Element in einem Array nicht deserialisiert werden kann, und Sie möchten dies möglicherweise detaillierter behandeln als eine monolithische Ausnahme für den gesamten Satz.
Diese Antwort befasst sich mit dem Teil "Ich möchte mit ihnen umgehen" Ihrer Frage, ohne zum Teil "Welche Ausnahmen" zu gelangen. Wie eine andere Antwort zeigt, erben alle Json.NET-Ausnahmen von der JsonException-Klasse. Daher wäre es eine gute Ausfallsicherheit , dies zu erfassen . Es scheint jedoch, dass Sie, wenn Sie wirklich verstehen möchten, was das Auslösen einer Ausnahme verursacht hat, deren Message
Eigenschaft lesen müssen , nicht basierend auf dem Exception
Typ, da die verschiedenen Typen mehr auf die von Ihnen ausgeführte Aktion ausgerichtet zu sein scheinen als die Fehlerkategorie. Im folgenden Beispielcode args.ErrorContext.Error
ist das eine Instanz von Exception
.
Beispielcode aus der Dokumentation:
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.