我正在使用 API 来搜索酒店,我们将这种类型称为 1。它被反序列化XmlSerializer
到我的Hotel
类中,这一切都按预期工作。我的问题是当我进行另一个 API 调用时,我们将调用类型 2,并且想要重用我的Hotel
类。
API 调用非常相似,类型 1 返回附近酒店的列表,类型 2 返回特定酒店的更多详细信息。我试图解析的额外信息之一是图像。在类型 1 和我的Hotel
班级中,我有:
[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
返回集合中第一个 Image 的属性并将其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
但没有成功。