নিউটনসফট.জসন.ডিজারিয়ালাইজ অবজেক্ট কী ব্যতিক্রম করে?


উত্তর:


124

JSON.NET নিম্নলিখিত ব্যতিক্রমগুলি সংজ্ঞায়িত করেছে:

  • JsonException
    • JsonReaderException
    • JsonSerializationException
    • JsonWriterException
    • JsonSchemaException

সিরিয়ালাইজেশন বা deserialization ত্রুটি সাধারণত একটি ফলাফল JsonSerializationException


9
ধন্যবাদ, তবে "সাধারণত"? ডেসরিয়াজিঅবজেক্ট ছুঁড়ে ফেলেছে এমন ব্যতিক্রমগুলির জন্য আমি কীভাবে সন্ধান করতে পারি?
cja

9
@ কেজা, আমি মনে করি এটি সর্বদা থাকবে JsonSerializationException, তবে আপনাকে লেখককে জিজ্ঞাসা করতে হবে বা উত্স কোডটি সন্ধান করতে হবে ... যাইহোক, JsonExceptionসমস্ত জেএসওএন যেহেতু আপনি কোনও কিছু মিস না করার বিষয়ে নিশ্চিত হতে চান তবে আপনি কেবল ধরতে পারবেন .NET ব্যতিক্রমগুলি এর উত্তরাধিকার সূত্রে প্রাপ্ত।
টমাস লেভেস্ক

167
আমি মনে করি ব্যতিক্রমগুলি সঠিকভাবে নথিভুক্ত করা দরকার need
কেএফএল

আমি একই ব্যতিক্রমের বিশদটি পেয়েছি, এমনকি ক্যাচ ব্লকের ব্যাতিক্রম শ্রেণীর সাথেও, দয়া করে তারা কীভাবে কাজ করে তা বুঝতে আমাকে সহায়তা করতে পারেন! আমার ক্ষেত্রে এখনই ইউএসকোড রয়েছে এমন জেএসএনের সাথে ব্যতিক্রম হচ্ছে, অনলাইন সরঞ্জামটি সঠিকভাবে পার্স করতে সক্ষম হয়েছে তবে জেএসনকনভার্টের সাথে ব্যর্থ হয়েছে
নাগা

@ কেএফএল আপনার মনে হয়েছে আপনি সেখানে এসেছেন খুব সুন্দর মনে করেন
মার্ক এস

60

নোট করুন যে Json.NET এর ত্রুটি পরিচালনার ডকুমেন্টেশনগুলি এআইপি ব্যবহারকারীদের জন্য সরাসরি ব্যতিক্রমগুলি ধরা না দিয়ে ত্রুটি ইভেন্টগুলি পরিচালনা করে ত্রুটিগুলি মোকাবেলা করার কৌশল দেখায়। আপনি যখন বিবেচনা করবেন যে অ্যারেতে কেবলমাত্র একটি আইটেম ডিসরিয়ালাইজ করতে ব্যর্থ হতে পারে এবং আপনি এটি পুরো সেটটির জন্য একক একাধিক ব্যতিক্রমের চেয়ে বেশি দানাদার ফ্যাশনে এটি পরিচালনা করতে চান This

এই উত্তরটি "কী ব্যতিক্রমগুলি" অংশ না পেয়ে আপনার প্রশ্নের অংশ "তাদের পরিচালনা করতে চান" তা সম্বোধন করে। অন্য উত্তরটি দেখায়, সমস্ত জসন.এনইটি ব্যতিক্রমগুলি জসনএক্সেপশন ক্লাস থেকে উত্তরাধিকারী , সুতরাং এটি ধরা একটি দুর্দান্ত ব্যর্থ-নিরাপদ হবে। তবে মনে হয় যে আপনি যদি সত্যিই বুঝতে চান যে কোন ব্যতিক্রম নিক্ষেপ করার কারণ ঘটেছে, তবে আপনাকে তার 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.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.