2016-08-30 213 views
0

我在嘗試序列化我的類時遇到錯誤。 xml模式由第三方定義,我無法更改它。具有相同名稱但具有不同屬性的序列化2屬性

的XML看起來像這樣(只片段的BTW):

<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

對於ReceivedDate屬性,不應該是'[XmlElement(「received-date」)]''而不是'[XmlElement(「date」)]?所需日期也一樣。我在你的XML中看不到「EnteredDate」。 – user3185569

+0

@ user3185569,理想情況是,但是如果你按照你的建議做了,那麼這個票據不會是而是它會是這在我的場景中並不好,因爲記住我不能改變xml的格式,因爲它來自第三方。 – Thierry

回答

1

你不能這樣做,並且按照你自己定義的Order,而不是自己實現IXmlSerializable。你可以做的是使用單一List<OrderDate>屬性:

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

了工作演示見this fiddle。如果您願意,您可以添加各種(忽略)屬性來查詢每種類型的日期。

另外,[Serializable]屬性與XmlSerializer無關,可以刪除。

+0

謝謝你的查爾斯。它使用一個列表,但我真的希望我可以改變這個模式,因爲我真的不喜歡它的格式。 – Thierry

相關問題