为什么WCF会像我期待的那样返回myObject []而不是List <t>?</t>

时间:2009-01-29 20:56:03

标签: c# wcf collections

我从WCF方法返回一个List。在我的客户端代码中,它的返回类型显示为MyObject []。我必须使用MyObject [],IList或IEnumerable ......

WCFClient myClient = new WCFClient();

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

我正在做的就是拍摄这个集合并将其绑定到网格。分配我收到的收藏品的最佳对象是什么?

4 个答案:

答案 0 :(得分:83)

您可以通过在添加引用时单击高级按钮来指定要使用通用列表而不是数组,也可以右键单击服务引用并选择configure以对其进行更改。

原因是WCF将通用列表序列化为要通过线路发送的数组。配置只是告诉svcutil创建一个代理,将它们转换回通用列表以方便使用。

答案 1 :(得分:13)

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

这就是List<T>

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

答案 2 :(得分:8)

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

但是,非常欢迎您创建自己的代理类,将数组转换回List或您想要的任何其他内容。手动创建自己的代理的好处在于,您可以完全控制自己的代理。

答案 3 :(得分:2)

将服务引用添加到客户端项目时,单击高级按钮并将集合类型从数组更改为您希望的类型...