2017-02-21 198 views
0

,我在下面的格式中獲取XML:XML序列化不能反序列化陣列正確

<Order> 
    <OrderData> 
     <OfferOrder></OfferOrder> 
     <OfferOrder></OfferOrder>  
    </OrderData> 
</Order> 

現在,當我是一個包含XML字符串Deserializng orderxml,它不填寫<OfferOrder>到我OrderData對象。

XmlSerializer xmlserializer = new XmlSerializer((typeof(Order))); 
using (TextReader reader = new StringReader(orderxml)) 
{ 
    order = (Order)xmlserializer.Deserialize(reader); 
} 

public partial class Order 
{ 
    private OrderOrderData orderDataField; 

    public OrderOrderData OrderData 
    { 
     get 
     { 
      return this.orderDataField; 
     } 
     set 
     { 
      this.orderDataField = value; 
     } 
    } 
} 

public partial class OrderOrderData 
{ 
    private OrderOrderDataOfferOrder[] offerOrderField; 

    public OrderOrderDataOfferOrder[] OfferOrder 
    { 
     get 
     { 
      return this.offerOrderField; 
     } 
     set 
     { 
      this.offerOrderField = value; 
     } 
    } 
} 

什麼毛病我的班?

+0

Simpelst方式被定義[這篇文章](http://stackoverflow.com/questions/364253/how-to-deserialize-xml-document) –

回答

2

你的代碼有一些問題。首先,你可以讓你的屬性來自動實現的屬性,那就是忽略私有後備領域,而是寫:

public MyType MyProperty { get; set; } 

其次你必須對XML串行化器內提供標籤的名稱。在你的情況下,XML中的名稱和類結構中的名稱是相同的,所以你可以省略名稱。但只是爲了完整性:

public class Order 
{ 
    [XmlElement("OrderData") 
    public OrderOrderData OrderData { get; set; } 
} 

public class OrderOrderData 
{ 
    [XmlElement("OfferOrder") 
    public OrderOrderDataOfferOrder[] OfferOrder { get; set; } 
} 

爲什麼doesn't對你的工作是陣列通常與嵌套元素在你的情況下,其名稱將是OfferOrders序列化的原因。在那個標籤中你有數組元素。通常不希望有更多的嵌套,你想要的是將數組的元素直接平鋪到實際的數據類中。要做到這一點,請在我的代碼OfferOrder中預先添加一個XmlElement陣列聲明,其名稱爲元素

+0

我懷疑另一個問題產生於「部分」(公共部分類OrderOrderData ') – Fildor

+0

@HimBromBeere'無法找到類型或名稱空間XmlElement' –

+0

然後添加它:'using System.Xml.Serialization;'。 – HimBromBeere