নিউটনসফট.জসন.ডিজারিয়ালাইজ অবজেক্ট কী ব্যতিক্রম করে? আমি তাদের পরিচালনা করতে চাই।
নিউটনসফট.জসন.ডিজারিয়ালাইজ অবজেক্ট কী ব্যতিক্রম করে? আমি তাদের পরিচালনা করতে চাই।
উত্তর:
JSON.NET নিম্নলিখিত ব্যতিক্রমগুলি সংজ্ঞায়িত করেছে:
JsonException
JsonReaderException
JsonSerializationException
JsonWriterException
JsonSchemaException
সিরিয়ালাইজেশন বা deserialization ত্রুটি সাধারণত একটি ফলাফল JsonSerializationException
।
JsonSerializationException
, তবে আপনাকে লেখককে জিজ্ঞাসা করতে হবে বা উত্স কোডটি সন্ধান করতে হবে ... যাইহোক, JsonException
সমস্ত জেএসওএন যেহেতু আপনি কোনও কিছু মিস না করার বিষয়ে নিশ্চিত হতে চান তবে আপনি কেবল ধরতে পারবেন .NET ব্যতিক্রমগুলি এর উত্তরাধিকার সূত্রে প্রাপ্ত।
নোট করুন যে 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.