Newtonsoft.Json.DeserializeObject फेंक क्या अपवाद है?


जवाबों:


124

JSON.NET निम्नलिखित अपवादों को परिभाषित करता है:

  • JsonException
    • JsonReaderException
    • JsonSerializationException
    • JsonWriterException
    • JsonSchemaException

सीरियलाइज़ेशन या डीरिएलाइज़ेशन त्रुटियों में आम तौर पर परिणाम होगा JsonSerializationException


9
धन्यवाद, लेकिन "आम तौर पर"? मैं कुछ अपवादों के लिए कैसे पता लगा सकता हूं कि DeseriazeObject फेंकता है?
cja

9
@cja, मुझे लगता है कि यह हमेशा रहेगा JsonSerializationException, लेकिन यह सुनिश्चित करने के लिए कि आपको लेखक से पूछना होगा या स्रोत कोड देखना होगा ... वैसे भी, आप बस पकड़ सकते हैं JsonExceptionयदि आप कुछ भी याद नहीं करना चाहते हैं, तो सभी JSON के बाद से .NET अपवाद इससे विरासत में मिला है।
थॉमस लेवेस्क

167
मुझे लगता है कि अपवादों को ठीक से प्रलेखित करने की आवश्यकता है।
KFL

मुझे एक ही अपवाद विवरण मिलता है, यहां तक ​​कि कैच ब्लॉक में अपवाद वर्ग के साथ, क्या आप मुझे यह समझने में मदद कर सकते हैं कि वे कैसे काम करते हैं! मेरे मामले में अभी JSON के साथ अपवाद हो रहा है, जिसमें यूनिकोड है, ऑनलाइन टूल इसे सही तरीके से पार्स करने में सक्षम है, लेकिन JSONConvert
नागा

@KFL एक अच्छा लगता है कि तुम वहाँ भाई
मार्क एस

60

ध्यान दें कि 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.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.