নেট। এর সাথে কাজ করার সময় আমি একটি খুব অদ্ভুত সমস্যা পেয়েছি XmlSerializer
।
নিম্নলিখিত উদাহরণ ক্লাস গ্রহণ করুন:
public class Order
{
public PaymentCollection Payments { get; set; }
//everything else is serializable (including other collections of non-abstract types)
}
public class PaymentCollection : Collection<Payment>
{
}
public abstract class Payment
{
//abstract methods
}
public class BankPayment : Payment
{
//method implementations
}
আফাইক, InvalidOperationException
সিরিয়ালাইজারের উত্পন্ন প্রকারগুলি সম্পর্কে না জেনে এটি সমাধানের জন্য তিনটি ভিন্ন পদ্ধতি রয়েছে Payment
।
1. যোগ করার পদ্ধতি XmlInclude
থেকে Payment
বর্গ সংজ্ঞা:
সমস্ত ক্লাসকে বাইরের রেফারেন্স হিসাবে অন্তর্ভুক্ত করার কারণে এটি সম্ভব নয় যার উপর আমার কোনও নিয়ন্ত্রণ নেই।
2. XmlSerializer
উদাহরণটি তৈরির সময় উত্পন্ন ধরণের প্রকারগুলি পাস করা
কাজ করে না।
৩. XmlAttributeOverrides
সম্পত্তির ডিফল্ট সিরিয়ালাইজেশন ( এই এসও পোস্টে বর্ণিত হিসাবে ) ওভাররাইড করার জন্য লক্ষ্য সম্পত্তির জন্য সংজ্ঞা দেওয়া হচ্ছে
এছাড়াও কাজ করে না ( XmlAttributeOverrides
সূচনাটি অনুসরণ করে)।
Type bankPayment = typeof(BankPayment);
XmlAttributes attributes = new XmlAttributes();
attributes.XmlElements.Add(new XmlElementAttribute(bankPayment.Name, bankPayment));
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
overrides.Add(typeof(Order), "Payments", attributes);
উপযুক্ত XmlSerializer
কনস্ট্রাক্টর তখন ব্যবহার করা হবে।
দ্রষ্টব্য: দ্বারা কাজ করে না আমি বোঝাতে চাইছি InvalidOperationException
( BankPayment
প্রত্যাশিত ছিল না ... ) নিক্ষেপ করা হয়েছে
কেউ কি এই বিষয়ে কিছু আলোকপাত করতে পারেন? কেউ কীভাবে সমস্যাটি আরও ডিবাগ করবে?