Newtonsoft.Json.DeserializeObject hangi istisnaları atar? Onları halletmek istiyorum.
Newtonsoft.Json.DeserializeObject hangi istisnaları atar? Onları halletmek istiyorum.
Yanıtlar:
JSON.NET aşağıdaki istisnaları tanımlar:
JsonException
JsonReaderException
JsonSerializationException
JsonWriterException
JsonSchemaException
Serileştirme veya seriyi kaldırma hataları genellikle bir JsonSerializationException
.
JsonSerializationException
, ama emin olmak için yazara sormanız veya kaynak koduna bakmanız gerekecek ... Her neyse, JsonException
hiçbir şeyi kaçırmadığınızdan emin olmak istiyorsanız yakalayabilirsiniz , çünkü tüm JSON .NET istisnaları ondan devralır.
Not o Json.NET en hata işleme belgeleri , API kullanıcısının istisnaları doğrudan yakalamak yerine hata olaylarını için bir strateji gösterdiğini . Bu, bir dizideki belki yalnızca bir öğenin seriyi kaldırmada başarısız olabileceğini düşündüğünüzde mantıklıdır ve bunu tüm küme için tek bir monolitik istisnadan daha ayrıntılı bir şekilde ele almak isteyebilirsiniz.
Bu cevap, "hangi istisnalar" kısmına girmeden sorunuzun "onları ele almak istiyorum" kısmına hitap eder. Başka bir yanıtın gösterdiği gibi, tüm Json.NET istisnaları JsonException Class'tan , bu yüzden bunu yakalamak güzel bir hata koruması olacaktır. Bununla birlikte, bir istisnanın atılmasına neyin sebep olduğunu gerçekten anlamak istiyorsanız , farklı türler gerçekleştirdiğiniz eyleme göre daha fazla odaklanmış göründüğünden Message
, Exception
türüne göre işlem yapmadan onun özelliğini okumanız gerekecek gibi görünüyor. hata kategorisi. Aşağıdaki örnek, kodda, args.ErrorContext.Error
bir örneğidir Exception
.
Belgelerden örnek kod:
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.