2017-02-21 125 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