Pengecualian apa yang dilemparkan oleh Newtonsoft.Json.DeserializeObject? Saya ingin menangani mereka.
Pengecualian apa yang dilemparkan oleh Newtonsoft.Json.DeserializeObject? Saya ingin menangani mereka.
Jawaban:
JSON.NET mendefinisikan pengecualian berikut:
JsonException
JsonReaderExceptionJsonSerializationExceptionJsonWriterExceptionJsonSchemaExceptionKesalahan serialisasi atau deserialisasi biasanya akan menghasilkan file JsonSerializationException.
JsonSerializationException, tetapi untuk memastikan Anda harus bertanya kepada penulis atau melihat ke kode sumber ... Bagaimanapun, Anda dapat menangkapnya JsonExceptionjika Anda ingin memastikan tidak melewatkan apa pun, karena semua JSON Pengecualian .NET mewarisi darinya.
Perhatikan bahwa dokumentasi penanganan kesalahan Json.NET menunjukkan strategi bagi pengguna API untuk menangani kesalahan dengan menangani kejadian kesalahan daripada langsung menangkap pengecualian. Ini masuk akal jika Anda mempertimbangkan bahwa mungkin hanya satu item dalam larik yang gagal melakukan deserialisasi, dan Anda mungkin ingin menangani ini dengan cara yang lebih terperinci daripada satu pengecualian monolitik untuk seluruh rangkaian.
Jawaban ini membahas bagian "ingin menanganinya" dari pertanyaan Anda tanpa sampai ke bagian "pengecualian apa". Seperti yang ditunjukkan jawaban lain, semua pengecualian Json.NET mewarisi dari JsonException Class , jadi menangkap ini akan menjadi cara yang aman untuk gagal. Namun, tampaknya jika Anda ingin benar-benar memahami apa yang menyebabkan pengecualian dilempar, Anda perlu membaca Messagepropertinya, bukan menangani berdasarkan Exceptionjenisnya, karena jenis yang berbeda tampaknya lebih berorientasi pada tindakan yang Anda lakukan daripada kategori kesalahan. Dalam kode contoh berikut, args.ErrorContext.Erroradalah turunan dari Exception.
Contoh kode dari dokumentasi:
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.