如何从Web服务返回IEnumerable <t> </t>

时间:2011-01-18 00:32:55

标签: c# .net web-services generics c#-4.0

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

在我的网络服务中,我返回IEnumerable<T>但是当我检查VS 2010中的智能感知时,我发现它给了我一个T[]

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

2 个答案:

答案 0 :(得分:8)

来自MSDN

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

不幸的是,没有。 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将被编组为一个字符串数组。

答案 1 :(得分:0)

数组T[]支持IEnumerable<T>

返回IEnumerable<T>

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