我尝试序列化课程时遇到错误。 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没有按照我需要的方式进行格式化。
当我到达时,我会有完全相同的参考问题。
我该如何规避这个问题?
答案 0 :(得分:1)
如果您没有自己实施Order
,则无法执行此操作并映射到IXmlSerializable
。你可以做的是使用一个List<OrderDate>
属性:
[XmlRoot("order")]
public class Order
{
[XmlElement("date")]
public List<OrderDate> Dates { get; set; }
}
有关正常工作的演示,请参阅this fiddle。如果您愿意,可以添加各种(忽略的)属性来查询每种类型的日期。
另外,[Serializable]
属性与XmlSerializer
无关,可以删除。