.NET के साथ काम करते समय मुझे एक बहुत ही अजीब समस्या आई है 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
}
AFAIK, इसे हल करने के लिए तीन अलग-अलग विधियां हैं जो InvalidOperationExceptionकि व्युत्पन्न प्रकारों के बारे में नहीं जानने वाले धारावाहिककार के कारण होती हैं Payment।
1. जोड़ने XmlIncludeके लिए Paymentवर्ग परिभाषा:
यह सभी वर्गों को बाहरी संदर्भ के रूप में शामिल किए जाने के कारण संभव नहीं है, जिस पर मेरा कोई नियंत्रण नहीं है।
2. XmlSerializerउदाहरण के निर्माण के दौरान व्युत्पन्न प्रकारों को पास करना
काम नहीं करता है।
3. 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उम्मीद नहीं की गई थी ... ) फेंक दिया है।
क्या कोई इस विषय पर कुछ प्रकाश डाल सकता है? कोई इस मुद्दे को कैसे आगे बढ़ाएगा?