2013-07-23 20 views
0

所以這可能是一些隨機請求,但任何幫助都會被大大接收! 我對XML文件,它是這樣工作的...將帶有2個不同XmlElementAttributes的xml反序列化爲一個數組

<images> 
    <image> 
     <url> 
      http://www.someUrl.com 
     </url> 
    </image> 

    <bonusimage> 
     <url> 
      http://www.someOtherUrl.com 
     </url> 
    </bonusimage> 
</images> 

什麼,我試圖做的是以下幾點:

[XmlArray("images")] 
[XmlElementAttribute("image", Type = typeof(CustomImageClass), IsNullable = false)] 
[XmlElementAttribute("bonusimage", Type = typeof(CustomImageClass), IsNullable = false)] 
[XmlChoiceIdentifierAttribute("ItemsElementName")] 
public CustomImageClass[] items; 

[XmlElementAttribute(IsNullable = false)] 
[XmlIgnoreAttribute()] 
public ImageType[] ItemsElementName; 

我也定義了像枚舉:

[XmlType(IncludeInSchema = false)] 
public enum ImageType 
{ 
    [XmlEnumAttribute("image")] 
    CustomImage, 
    BonusImage, 
} 

我試圖按照下面介紹我的問題的網頁上的第二個方案。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlchoiceidentifierattribute(v=vs.95).aspx

然而運行此代碼導致以下錯誤:會員「項」指定

歧義的類型。項目'bonusimage'和'圖像'具有相同的類型。請考慮使用XmlChoiceIdentifierAttribute代替XmlElementAttribute。

對不起,對於這個龐大的帖子,我一直在撞牆撞了一會兒,想給儘可能多的信息!我想我需要第二雙眼睛來幫助我瞭解我的錯誤。

再次感謝!

+0

不幸的是,我不認爲你可以做到這一點。這看起來應該是一個「非此即彼」的選擇,而不是一個包羅萬象的選擇。不幸的是,我認爲你最好的選擇是有兩個唯一的字段將xml反序列化,然後有一個將圖像和紅利圖像連接成一個數組/列表/任意的唯一獲取唯一字段。 – Tory

回答

0

好,非常感謝您的輸入,但不幸的是我需要保持對象的順序。所以這是我發現的解決方案:

[XmlArray("images")] 
[XmlElementAttribute(Type = typeof(Bonusimage))] 
[XmlElementAttribute(Type = typeof(CustomImageClass))] 
public CustomImageClass[] items; 


[XmlType("bonusimage")] 
public class Bonusimage: CustomImageClass 
{ 

} 

[XmlType("image")] 
public class CustomImageClass 
{ 

} 
相關問題