为什么WCF像我期望的那样返回myObject 而不是List <T>?

我从我的WCF方法返回一个列表。 在我的客户端代码中,返回types显示为MyObject []。 我必须使用MyObject []或IList或IEnumerable …

WCFClient myClient = new WCFClient(); MyObject[] list = myClient.GetMyStuff(); or IList<MyObject> list = myClient.GetMyStuff(); or IEnumerable<MyObject> list = myClient.GetMyStuff(); 

我正在做的是把这个集合并绑定到一个网格。 什么是最好的对象分配我返回的集合?

您可以通过在添加引用时单击高级button来指定要使用通用列表而不是数组,也可以右键单击服务引用并select“configuration”以将其更改。

原因是WCF将通用列表序列化为数组以通过线路发送。 该configuration只是告诉svcutil创build一个代理,将它们转换回通用列表为了您的方便。

当您使用svcutil.exe创build客户端代码时,您需要告诉它如何parsing某些不可用的引用。

这是你如何做的List<T>

 svcutil /o:YourService.cs /ct:System.Collections.Generic.List`1 http://example.com/mex 

Stever B是正确的。 WCF很难尝试不被耦合到.NET。 您可能希望允许Java客户端连接到您的组件。 数组可互操作。 通用.NET列表不是。

不过,欢迎您创build自己的代理类,将数组转换回List或您想要的任何其他types。 手动创build自己的代理服务器的好处是,您完全可以控制自己的function。

将服务引用添加到客户端项目时,单击高级button并将数组的集合types更改为您想要的值。