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

时间:2009-02-27 12:10:38

标签: .net wcf datacontract

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

  • 应该是ICollection< T>, IList< T>,T []或......?
  • 我应该使用接口类型还是具体类型?
  • 有什么权衡需要考虑?

3 个答案:

答案 0 :(得分:13)

注意:我正在从客户端的角度回答这个问题 - 即/collectionType:<type> svcutil.exe上的List<T>开关(也可在IDE中使用)。

就个人而言,我倾向于保持简单并使用BindingList<T>。如果要进行大量的数据绑定,Enumerable可能是一个选项,但对于对象属性,它通常是过度的。阵列让生活变得非常艰难......避免它们;-p

请注意,在.NET 3.5中,由于Collection<T>上的扩展方法,每个集合类型可用的功能都会模糊。

通常情况下,当您认为可能要将集合子类化为使用virtual扩展点时,IList<T>非常有用。对于WCF来说,这不是一个真正的选择。

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

答案 1 :(得分:1)

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

您可以使用具体类型,例如MyClass []或List

答案 2 :(得分:0)

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

请记住,Web服务根据WSDL或mex为客户端提供服务的描述。对于WSDL,客户端将接收描述要发送和接收的消息的XML Schema。在集合的情况下,客户端将只看到具有maxOccurs =“unbounded”的元素,而不是具有maxOccurs =“1”的元素。客户端可以将其解释为数组,列表或其他内容。无论您从服务中返回哪个集合,客户端都会看到maxOccurs =“unbounded”并按其喜欢解释它。

异常将返回某种字典,我不知道它是如何工作的。