如何从Web服务返回IEnumerable <T>

Koe*_*oen 5 .net c# generics web-services c#-4.0

我想知道为什么我不能通过IEnumerable<T>网络服务返回.

在我的网络服务中,我返回了一个IEnumerable<T>但是当我在VS 2010中检查IntelliSense时,我看到它给了我一个T[].

有人可以给我这个行为的解释吗?

Vic*_*din 8

来自MSDN:

我可以在Web服务中使用泛型吗?

很不幸的是,不行.Web服务必须公开基于WSDL的契约.此类合同始终受所使用的消息格式的表现力的限制.例如,基于HTTP-GET的Web服务仅支持基本类型(如int或string),但不支持复杂类型(如DataSet).基于SOAP的Web服务功能更强大,但SOAP无法表示泛型类型参数.因此,目前,您无法定义依赖于泛型类型的Web服务.也就是说,您可以定义依赖于封闭构造泛型类型的.NET Web服务,例如:

public class MyWebService 
{
   [WebMethod]
   public List<string> GetCities() 
   {
      List<string> cities = new List<string>();
      cities.Add("New York");
      cities.Add("San Francisco");
      cities.Add("London");
      return cities;
   }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,List将被编组为字符串数组.