0

我正在使用 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但没有成功。

4

1 回答 1

0

在 Marc 建议使用 之后XmlAttributeOverrides,感觉有点“脏”,所以我决定创建一个抽象HotelBase类,将ImageURL属性抽象化并用XmlIgnore. 现在我可以在我的Hotel1Hotel2类中覆盖它。

于 2012-12-13T11:39:00.277 回答