序列化具有相同名称但属性不同的2个属性

时间:2016-08-30 12:08:54

标签: c# serialization xml-serialization

我尝试序列化课程时遇到错误。 xml架构由第三方定义,我无法对其进行更改。

xml看起来像这样(仅限代码段):

<order>
<date type="received-date">20160810</date>
<date type="required-date">20160810</date>
<reference type="cust-order-no">CCCC</reference>
<reference type="an-2">AAAA</reference>
<reference type="an-3">BBBB</reference>
<order>

我为订单日期定义了以下类

[Serializable]
public class OrderDate
{
    public enum OrderDateTypeEnum
    {
        [Description("entered-date")]
        EnteredDate,
        [Description("received-date")]
        ReceivedDate,
        [Description("required-date")]
        RequiredDate
    }

    private OrderDateTypeEnum _typeEnum;

    [XmlIgnore]
    public OrderDateTypeEnum TypeEnum
    {
        get { return this._typeEnum; }
        set
        {
            this._typeEnum = value;
            this.Type = this._typeEnum.GetDescription();
        }
    }

    [XmlAttribute("type")]
    public string Type { get; set; }

    [XmlText]
    public string Name { get; set; }
}

,订单类定义为:

[Serializable]
public class Order
{
    [XmlElement("date")]
    public OrderDate EnteredDate { get; set; }

    [XmlElement("date")]
    public OrderDate ReceivedDate { get; set; }

    [XmlElement("date")]
    public OrderDate RequiredDate { get; set; }
}

但是当我序列化时,我收到一个错误:

The XML element 'date' from namespace '' is already present in the current
scope. Use XML attributes to specify another XML name or namespace for the
element.

当我删除[XmlElement("date")]时,它可以正常工作,但我的xml没有按照我需要的方式进行格式化。

当我到达时,我会有完全相同的参考问题。

我该如何规避这个问题?

1 个答案:

答案 0 :(得分:1)

如果您没有自己实施Order,则无法执行此操作并映射到IXmlSerializable。你可以做的是使用一个List<OrderDate>属性:

[XmlRoot("order")]
public class Order
{
    [XmlElement("date")]
    public List<OrderDate> Dates { get; set; }
}

有关正常工作的演示,请参阅this fiddle。如果您愿意,可以添加各种(忽略的)属性来查询每种类型的日期。

另外,[Serializable]属性与XmlSerializer无关,可以删除。

相关问题