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

5

我想知道为什么我不能通过Web服务返回一个IEnumerable<T>

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

有人能解释一下这种行为吗?


你是在询问 ASMX Web 服务还是 WCF 吗?这两者的答案是不同的。 - John Saunders
2个回答

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;
   }
}

在上面的例子中,List会被转换成字符串数组。

0

数组T[]支持IEnumerable<T>

你正在返回IEnumerable<T>

    public IEnumerable<T> Something()
    {
        return new T[] {};
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接