私はホテルを検索するために API を使用しています。これをタイプ 1 と呼びます。それはXmlSerializer
私のHotel
クラスに逆シリアル化され、これはすべて期待どおりに正常に機能します。私の問題は、タイプ 2 を呼び出す別の API 呼び出しを行っており、Hotel
クラスを再利用したい場合です。
API 呼び出しはよく似ており、タイプ 1 は近くのホテルのリストを返し、タイプ 2 は特定のホテルの詳細を返します。私が解析しようとしている余分な情報の 1 つは画像です。タイプ1と私のHotel
クラスには次のものがあります:
[XmlElement("images")]
public virtual string ImageURL { get; set; }
これは、タイプ 1 の呼び出しでは正常に機能します。タイプ 2 の呼び出しでは、単なる 1 つの文字列ではなく、画像の配列になります。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
が、成功しませんでした。