C#XmlSerializer:反序列化子元素文本值

时间:2016-02-17 23:42:34

标签: c# xml deserialization

我无法将XML数据反序列化为我定义的数据结构。我对XML的创建没有任何控制权,但结构如下:

<order id="123456">
   <userid>555</userid>
   <merchant id="111">SomeMerchant</merchant>
</order>

我可以获得顶级属性和简单元素值,但是给我提出问题的部分是将子元素的值赋给子类中的属性。我的数据结构类似于:

public class OrderData
{
    [XmlElement("merchant", typeof(OrderMerchant))]
    public OrderMerchant Merchant { get; set; }

    [XmlAttribute("id")]
    public int OrderID { get; set; }
}

[Serializable]
public class OrderMerchant
{
    [XmlElement("merchant")]
    public string Name { get; set; }

    [XmlAttribute("id")]
    public int ID { get; set; }
}

我的问题:当我反序列化XML并获取一个对象时,我有一个ID为111但名称为null的Merchant对象。如何标记我的对象以便将元素文本分配给Name属性?我尝试使用元素名称,我尝试了一个XPath表达式(但我甚至不知道在这种情况下是否允许这样做。)

1 个答案:

答案 0 :(得分:2)

您告诉序列化程序序列化元素商家,然后商家对象希望接收包含该名称的另一个元素“商家”。相反,使用属性[XmlText]标记Name属性,如下所示:

[Serializable]
public class OrderMerchant
{
    [XmlText]
    public string Name { get; set; }

    [XmlAttribute("id")]
    public int ID { get; set; }
}

那应该这样做

Source