关于.net:哪种列表/集合类型最适合在WCF数据协定中使用?

Which list/collection type is best to use in a WCF data contract?

定义WCF数据协定时,应将哪种类型用于集合/列表?

  • 如果是ICollection,我是说,还是……?
  • 我应该使用接口类型还是具体类型?
  • 有哪些权衡需要考虑?

注:我是从客户的角度回答这个问题的,也就是说,/collectionType:开关打开了svcutil.exe(也在IDE中提供)。

就个人而言,我倾向于保持简单并使用List。如果要进行大量的数据绑定,那么BindingList可能是一个选项,但对于对象属性,它通常是多余的。阵列使生活变得非常困难…避开它们;-P

请注意,对于.NET 3.5,由于Enumerable上的扩展方法,每个集合类型的可用功能都是模糊的。

通常,当您认为可能要将集合子类化以使用virtual扩展点时,Collection非常有用。这不是WCF的真正选择。

如前所述,除非使用程序集共享,否则使用IList等不是一个选项,因为生成的类将无法创建集合。


无法在DataContract中使用接口类型,因为序列化程序无法处理接口类型属性。

您可以使用具体类型,例如myclass[]或list


除了不能使用接口类型之外,使用哪种集合类型也不重要。您服务的客户将永远看不到它们。

记住,Web服务以WSDL或MEX的形式向客户机提供服务的描述j。在WSDL的情况下,客户机将接收一个描述要发送和接收的消息的XML模式。在集合的情况下,客户机只会看到一个maxOccurs="unbounded"的元素,而不是maxOccurs="1"的元素。客户机可以将其解释为数组、列表或其他。无论您从服务中返回哪个集合,客户机都将看到maxoccurs="unbounded",并按照自己的喜好对其进行解释。

唯一的例外是返回某种类型的字典,我不知道它是如何工作的。