2013-09-02 28 views
8

Tôi đang cố gắng để serialize một danh sách của nhiều yếu tố (Các nhà cung cấp, khách hàng, Sản phẩm, vv), tất cả bắt nguồn từ cùng một lớp (MasterElement)C# - serialization XML của các lớp thừa

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; 
} 

Cho đến nay, XML được phân tích cú pháp, nhưng sản lượng hiện nay là

<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> 

nhưng những gì tôi muốn là

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

gì am Tôi làm sai ở đây?

Trả lời

7

Bạn có thể sử dụng XmlArrayItem để làm được việc này:

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

Từ MSDN liên kết:

Các XmlArrayItemAttribute hỗ trợ đa hình - nói cách khác, nó cho phép XmlSerializer để thêm các đối tượng có nguồn gốc vào một mảng.

+0

Cảm ơn, nó hoạt động hoàn hảo :) –

Các vấn đề liên quan