在定义WCF数据契约时,哪种类型应该用于集合/列表?哪个列表/集合类型最适合在WCF数据合同中使用?
- 它应该是ICollection的<牛逼>, IList的<牛逼>,T []还是...?
- 我应该使用接口类型还是具体类型?
- 需要考虑什么样的折衷?
在定义WCF数据契约时,哪种类型应该用于集合/列表?哪个列表/集合类型最适合在WCF数据合同中使用?
注意:我从客户端的角度回答了这个问题 - 即/collectionType:<type>
开关svcutil.exe
(也可在IDE中使用)。
我个人倾向于保持简单并使用List<T>
。如果你打算做大量的数据绑定,BindingList<T>
可能是一个选项,但对于对象属性,它通常是矫枉过正的。数组使生活变得非常艰难...避免它们; -p
请注意,对于每个集合类型可用的功能模糊的.NET 3.5,由于Enumerable
上的扩展方法。
通常,Collection<T>
在您认为您可能想要继承该集合以使用virtual
扩展点时非常有用。这不是WCF的选择。
如前所述,除非您使用程序集共享,否则使用IList<T>
等不是一个选项,因为生成的类将无法创建集合。
您不能在datacontract中使用接口类型,因为序列化程序不能使用接口类型属性。
您可以使用混凝土类型,例如MyClass []或列表
除了不能使用接口类型这一事实外,使用哪种集合类型并不重要。你的服务的客户永远不会看到他们。
请记住,Web服务根据WSDL或mex提供对客户端服务的描述。在WSDL的情况下,客户端将收到描述要发送和接收的消息的XML模式。在集合的情况下,客户端只会看到一个maxOccurs =“unbounded”的元素,而不是maxOccurs =“1”的元素。客户端可能会将其解释为数组,列表或其他内容。无论您从服务中返回哪个集合,客户端都会看到maxOccurs =“unbounded”并按照它的喜好进行解释。
这个例外会返回某种类型的字典,我不知道它是如何工作的。
哪种类型最适合使用? – JacobE 2009-02-27 12:33:02