Ich habe ein sehr seltsames Problem bei der Arbeit mit .NETs XmlSerializer.
Nehmen Sie die folgenden Beispielklassen:
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, es gibt drei verschiedene Methoden, um das Problem zu lösen InvalidOperationException, das dadurch verursacht wird, dass der Serializer die abgeleiteten Typen von nicht kennt Payment.
1. Hinzufügen XmlIncludezur PaymentKlassendefinition:
Dies ist nicht möglich, da alle Klassen als externe Referenzen enthalten sind, über die ich keine Kontrolle habe.
2. Übergeben der Typen der abgeleiteten Typen während der Erstellung der XmlSerializerInstanz
Funktioniert nicht
3. Definieren XmlAttributeOverridesder Zieleigenschaft, um die Standardserialisierung der Eigenschaft zu überschreiben (wie in diesem SO-Beitrag erläutert ).
Funktioniert auch nicht ( XmlAttributeOverridesInitialisierung folgt).
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);
Der entsprechende XmlSerializerKonstruktor würde dann verwendet.
HINWEIS: Mit funktioniert nicht Ich meine, das InvalidOperationException( BankPaymentwurde nicht erwartet ... ) wird geworfen.
Kann jemand etwas Licht in das Thema bringen? Wie würde man vorgehen und das Problem weiter debuggen?