XML序列化程序无法正确反序列化数组

时间:2017-02-21 10:34:50

标签: c# xml-serialization

我正在以下列格式获取XML:

print(statsmodels.__version__)
print(pd.__version__)
print(np.__version__)
0.6.1
0.18.1
1.11.3

现在,当我使用包含XML的Deserializng字符串<Order> <OrderData> <OfferOrder></OfferOrder> <OfferOrder></OfferOrder> </OrderData> </Order> 时,它不会将orderxml填入我的<OfferOrder>对象。

OrderData

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

我的班级有问题吗?

1 个答案:

答案 0 :(得分: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; }
}

它不适合您的原因是数组通常使用嵌套元素序列化,在您的情况下,该元素的名称为OfferOrders。在该标记内,您将拥有数组元素。通常不希望进一步嵌套,而是将数组的元素直接压缩到实际的数据类中。为此,请在我的代码XmlElement中在您的数组声明的前面添加OfferOrder,其名称为元素