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

Sco*_*ttG 63 c# collections wcf

我从我的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();
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*r B 83

您可以通过在添加引用时单击高级按钮来指定要使用通用列表而不是数组,也可以右键单击服务引用并选择configure以在适当位置更改它.

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


And*_*are 13

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

这是你如何做到的List<T>:

svcutil /o:YourService.cs /ct:System.Collections.Generic.List`1 http://example.com/mex
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的解决方案,但不能处理“我正在将C#与C#一起使用”的一般情况,并且不需要额外的步骤,即必须始终使用我正在制作和部署的大量服务手动解析常见的集合类型。 ' (2认同)

Tad*_*ghe 8

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

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