2013-09-02 9 views
8

Ich versuche, eine Liste von mehreren Elementen (Lieferanten, Kunden, Produkten, etc.), die alle aus der gleichen Klasse (MasterElement)C# - XML-Serialisierung von abgeleiteten Klassen

public class XMLFile 
{ 
    [XmlArray("MasterFiles")] 
    public List<MasterElement> MasterFiles; 
    ... 
} 

[XmlInclude(typeof(Supplier))] 
[XmlInclude(typeof(Customer))] 
public abstract class MasterElement 
{ 
    public MasterElement() 
    { 

    } 
} 

[XmlType(TypeName = "Supplier")] 
public class Supplier: MasterElement 
{ 
    public string SupplierID; 
    public string AccountID; 
} 

[XmlType(TypeName = "Customer")] 
public class Customer: MasterElement 
{ 
    public string CustomerID; 
    public string AccountID; 
    public string CustomerTaxID; 
} 

Bisher Ableitung zu serialisiert, die XML-Parsing, aber die aktuelle Ausgabe ist

<MasterFiles> 
    <MasterElement xsi:type="Supplier"> 
     <SupplierID>SUP-000001</SupplierID> 
     <AccountID>Unknown</AccountID> 
    </MasterElement> 
    <MasterElement xsi:type="Customer"> 
     <CustomerID>CLI-000001</CustomerID> 
     <AccountID>Unknown</AccountID> 
     <CustomerTaxID>Unknown</CustomerTaxID> 
    </MasterElement> 
</MasterFiles> 

aber was ich will

<MasterFiles> 
    <Supplier> 
     <SupplierID>SUP-000001</SupplierID> 
     <AccountID>Unknown</AccountID> 
    </Supplier> 
    <Customer> 
     <CustomerID>CLI-000001</CustomerID> 
     <AccountID>Unknown</AccountID> 
     <CustomerTaxID>Unknown</CustomerTaxID> 
    </Customer> 
</MasterFiles> 

was Uhr ist Ich mache hier falsch?

Antwort

7

können Sie XmlArrayItem verwenden, dies zu umgehen:

public class XMLFile 
{ 
    [XmlArray("MasterFiles")] 
    [XmlArrayItem("Supplier", typeof(Supplier))] 
    [XmlArrayItem("Customer", typeof(Customer))] 
    public List<MasterElement> MasterFiles; 
} 

aus der verknüpften MSDN:

Die XmlArrayItemAttribute unterstützt Polymorphismus - mit anderen Worten, es XmlSerializer erlaubt abgeleitete Objekte hinzufügen zu einem Array.

+0

Danke, es hat perfekt funktioniert :) –

Verwandte Themen