Newtonsoft.Json.DeserializeObject फेंक क्या अपवाद है? मैं उन्हें संभालना चाहता हूं।
Newtonsoft.Json.DeserializeObject फेंक क्या अपवाद है? मैं उन्हें संभालना चाहता हूं।
जवाबों:
JSON.NET निम्नलिखित अपवादों को परिभाषित करता है:
JsonException
JsonReaderException
JsonSerializationException
JsonWriterException
JsonSchemaException
सीरियलाइज़ेशन या डीरिएलाइज़ेशन त्रुटियों में आम तौर पर परिणाम होगा JsonSerializationException
।
JsonSerializationException
, लेकिन यह सुनिश्चित करने के लिए कि आपको लेखक से पूछना होगा या स्रोत कोड देखना होगा ... वैसे भी, आप बस पकड़ सकते हैं JsonException
यदि आप कुछ भी याद नहीं करना चाहते हैं, तो सभी JSON के बाद से .NET अपवाद इससे विरासत में मिला है।
ध्यान दें कि Json.NET की त्रुटि से निपटने के दस्तावेज़ सीधे अपवादों को पकड़ने के बजाय त्रुटि घटनाओं से निपटने के लिए एपीआई उपयोगकर्ता के लिए एक रणनीति को दर्शाता है। यह तब समझ में आता है जब आप समझते हैं कि किसी सरणी में केवल एक आइटम डिसेररलाइज करने में विफल हो सकता है, और आप पूरे सेट के लिए एक से अधिक अखंड अपवाद से अधिक दानेदार फैशन में इसे संभालना चाह सकते हैं।
यह जवाब आपके प्रश्न के "उन्हें संभालना चाहते हैं" भाग को "क्या अपवाद" भाग पर प्राप्त किए बिना संबोधित करता है। जैसा कि एक अन्य उत्तर से पता चलता है, सभी Json.NET अपवाद JsonException Class से प्राप्त होते हैं , इसलिए इसे पकड़ना एक अच्छा विफल-सुरक्षित होगा। हालांकि, ऐसा लगता है कि यदि आप वास्तव में समझना चाहते हैं कि किस अपवाद को फेंक दिया गया है, तो आपको इसकी Message
संपत्ति को पढ़ने की आवश्यकता होगी , न कि Exception
प्रकार के आधार पर संभालना , क्योंकि विभिन्न प्रकार की कार्रवाई जिस पर आप प्रदर्शन कर रहे हैं, उस पर अधिक उन्मुख होने लगते हैं त्रुटि श्रेणी। निम्नलिखित उदाहरण कोड में, args.ErrorContext.Error
का एक उदाहरण है Exception
।
प्रलेखन से उदाहरण कोड:
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.