.NET'lerle çalışırken çok garip bir sorun yaşıyorum XmlSerializer
.
Aşağıdaki örnek sınıfları alın:
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
serileştiricinin türetilmiş Payment
.
1. ekleme XmlInclude
için Payment
sınıf tanımı:
Bu, üzerinde hiçbir kontrole sahip olmadığım dış referanslar olarak dahil edilen tüm sınıflar nedeniyle mümkün değil.
2. Türetilmiş türlerin türlerini, XmlSerializer
örneğin oluşturulması sırasında iletme
Çalışmıyor.
3. XmlAttributeOverrides
Özelliğin varsayılan serileştirmesini geçersiz kılmak için hedef özelliği tanımlama ( bu SO yazısında açıklandığı gibi )
Ayrıca çalışmaz ( XmlAttributeOverrides
aşağıdaki başlatma).
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);
Daha XmlSerializer
sonra uygun kurucu kullanılacaktır.
NOT: ile çalışmıyor demek istediğim InvalidOperationException
( BankPayment
beklenmiyordu ... ) atıldı.
Biri konuya biraz ışık tutabilir mi? Sorun nasıl devam eder ve daha fazla hata ayıklanır?