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
JsonReaderException
JsonSerializationException
JsonWriterException
JsonSchemaException
Kesalahan 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 JsonException
jika 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 Message
propertinya, bukan menangani berdasarkan Exception
jenisnya, karena jenis yang berbeda tampaknya lebih berorientasi pada tindakan yang Anda lakukan daripada kategori kesalahan. Dalam kode contoh berikut, args.ErrorContext.Error
adalah 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.