为什么WCF方法的返回类型会从泛型集合更改为数组?

时间:2009-06-10 00:22:18

标签: .net wcf

我有一个WCF服务方法,我为返回类型编写了集合类型。

但是如果我生成一个代理类并从客户端使用该方法,则方法返回类型将从集合更改为数组。

为什么会这样?

4 个答案:

答案 0 :(得分:5)

记住 - WCF也是一个可互操作的系统,例如您的另一端可能是PHP或Java或Ruby客户端,它们无法理解.NET通用列表!

您可以使用Andrew和Jimmie提到的两个选项指定您想要的通用列表 - 这是有效的,当且仅当您还使用DataContractSerializer(这是WCF的默认选项)时。但是,如果您的服务和/或数据合同无论出于何种原因需要使用XmlSerializer,那么这些设置将无济于事 - 您的列表将再次转换为数组。

所以尝试显示这些选项,如果它们适合你 - 太棒了!但请注意,为什么您的通用列表可能只需要转换为更具互操作性的对象数组,这是有充分理由的。

马克

答案 1 :(得分:2)

您需要告诉svcutil将类型生成为您想要的任何泛型类型。您可以通过将此开关添加到svcutil命令来执行此操作:

svcutil ..blah... /ct:System.Collections.ObjectModel.Collection`1

/ct /collectionType 的缩写。在这种情况下,我指定了Collection<T>,但您可以轻松使用System.Collections.Generic.List<T>

答案 2 :(得分:1)

如果使用Visual Studio中的“添加服务引用”生成代理,则会出现一个“高级”按钮,该按钮会弹出一个对话框,允许您指定返回类型应该是什么(包括通用类型)。

答案 3 :(得分:0)

如果您使用的是Visual Studio,则只需右键单击服务引用即可对其进行配置。 然后,您可以选择(在高级设置中?)告诉您的应用如何将数组作为集合处理。