2009-09-28 39 views
0

鑑於以下片段,其中鏈接是一系列無限制的圖像鏈接和文檔鏈接,應該刪除的類是什麼?Xml反序列化 - 多種類型的序列

<Values> 
    <Links> 
     <ImageLink>http://#</ImageLink> 
     <ImageLink>http://#</ImageLink> 
     <DocumentLink>http://#</DocumentLink> 
    </Links> 
</Values> 

通常情況下,如果它只是imagelinks數組我可能有

public class Values 
{ 
    public imagelink[] ImageLinks { get; set; } 
} 

public class ImageLink 
{ 
    public string Value { get; set; } 
} 

但與上面的XML我難倒。

順便說一句,我沒有控制的XML。

回答

2

這個工作

public class DocumentLink : Link 
{ 
} 

public class ImageLink : Link 
{ 
} 

public class Link 
{ 
    [XmlText] 
    public string Href { get; set; } 
} 

public class Values 
{ 
    [XmlArrayItem(ElementName = "ImageLink", Type = typeof(ImageLink))] 
    [XmlArrayItem(ElementName = "DocumentLink", Type = typeof(DocumentLink))] 
    public Link[] Links { get; set; } 
} 
1

你應該有一個基類鏈接如下

public class Link 
{ 
    public string Href { get; set; } 
} 

public class ImageLink : Link 
{ 
} 

public class DocumentLink : Link 
{ 
} 

和你的價值觀類會是什麼樣子:

public class Values 
{ 
    public Link[] links { get; set; } 
} 

或者,你可以使用ArrayList,而不是強類型數組。

+1

不夠好。他還需要在'links'上顯式聲明'[XmlElement]'聲明來讓'XmlSerializer'知道'Link'的派生類型是什麼(以及相應的元素名稱是什麼)。 –

+0

這是爲了回答「它應該是什麼類?」的問題,但你有一個有效的答案需要工作。我會離開它,因爲Jaimal Chohan已經發布了工作代碼。 –

+0

乾杯比爾和帕維爾,雖然比爾的答案沒有工作,但確實讓我朝着正確的方向前進 –