从ASMX服务返回ArrayList

Gon*_*alo 0 c# asp.net web-services asmx

我有几个关于Web服务的问题,如果有人能指出我正确的方向,我真的很感激.

在我的类库中,我有两个类:Hotel&RoomType.Hotel类包含RoomType对象的ArrayList.

在我的Web服务中,我有一个GetHotels方法如下:

[WebMethod]
[XmlInclude(typeof(Hotel))]
[XmlInclude(typeof(RoomType))]
public ArrayList GetHotels()
{
    return Sistema.GetInstance().GetHotels();
}
Run Code Online (Sandbox Code Playgroud)

类Sistema中的GetHotels(),从数据库中检索信息并返回一个ArrayList.

我不得不使用XMLInclude因为我得到了:

类型酒店(或RoomType)不是预期的.使用XmlInclude或SoapInclude属性指定静态未知的类型

然后在我的Web应用程序中,我有这个代码:

WebService sample = new Service();
ArrayList hotels = service.GetHotels();
Run Code Online (Sandbox Code Playgroud)

这不编译,所以我不得不改为以下代码:

WebService sample = new Service();
object[] hotels = service.GetHotels();
Run Code Online (Sandbox Code Playgroud)

这是我的第一个问题:是否可以返回一个ArrayList,或者每次我必须将结果转换为ArrayList?

知道ArrayList包含Hotel对象,我添加了以下代码:

foreach (Hotel hotel in hotels)
{
    ...        
}
Run Code Online (Sandbox Code Playgroud)

这个编译,但是当我执行时,我收到以下错误:

无法将类型为"System.Xml.XmlNode []"的对象强制转换为"Hotel".

所以,我的下一个问题是:如何将结果转换为Hotel对象并使用它?

Joh*_*ers 6

无论是ArrayList也不是特定于.NET任何其他类型将永远不会跨线从Web服务通过.Web服务只讲XML.

有关更多详细信息,请参阅基础:Web服务的工作原理.

在这种特殊情况下,ArrayList正在被对待object[],这意味着:"任意数量的某种对象".在SOAP XML中处理它的唯一方法是将它视为某种XML节点的数组,因此XmlNode[].