我使用API來搜索酒店,我們將這種類型稱爲1.它被XmlSerializer
反序列化到我的Hotel
類中,並且這一切都按預期正常工作。我的問題是當我正在進行另一個API調用時,我們將調用類型2,並且想要重新使用我的Hotel
類。覆蓋XML反序列化的屬性
API調用非常相似,類型1返回附近酒店列表,類型2返回特定酒店的更多詳細信息。我試圖解析的額外信息之一是圖像。在1型和我Hotel
I類有:
[XmlElement("images")]
public virtual string ImageURL { get; set; }
這對於1型呼叫工作正常。現在對於類型2調用,它是一個圖像數組,而不僅僅是一個字符串。我創建了一個名爲Hotel2
新的類,它從Hotel
派生,如下所示:
public class Hotel2 : Hotel
{
[XmlArray("images")]
[XmlArrayItem("url")]
public List<string> ImageURLs { get; set; }
[XmlIgnore]
public override string ImageURL
{
get
{
return (this.ImageURLs != null && this.ImageURLs.Count > 0 ? this.ImageURLs[0] : String.Empty);
}
}
}
,你可以看到我有一個新的屬性ImageURLs
(注意「S」)的處理陣列。我也覆蓋ImageURL
屬性,它返回ImageURLs
集合中的第一個圖像,並將其標記爲XmlIgnore
,因此它不會被反序列化。
的問題是,它似乎XmlSerializer
忽略我XmlIgnore
財產,並試圖由此反序列化基礎屬性導致此異常:The XML element 'images' from namespace '' is already present in the current scope. Use XML attributes to specify another XML name or namespace for the element.
任何想法,我能做些什麼嗎?我也嘗試用new
來隱藏該物業,但沒有成功。
就個人而言,我會說,'有一些單一的東西成才 ... 別的 '是從架構角度來看一個非常糟糕的主意。如果第一個是'
'(注意不是's'),那麼做起來很微不足道,而且更清晰。 –
@MarcGravell,我同意,但API不在我的控制範圍之內,原因是「遺留問題」。 – eth0
你可以用'XmlAttributeOverrides'來做,但坦率地說,我的建議是:去兩個模型 –