定义WCF数据约定时,应该对集合/列表使用哪种类型?
发布于 2009-02-27 12:46:17
注意:我是从客户端的角度来回答这个问题的--即svcutil.exe
上的/collectionType:<type>
开关(在集成开发环境中也可用)。
就我个人而言,我倾向于保持简单,并使用List<T>
。如果你要做大量的数据绑定,BindingList<T>
可能是一个选择,但是对于对象属性来说,它通常是多余的。数组让生活变得非常艰难……避开它们;-p
请注意,在.NET 3.5中,由于Enumerable
上的扩展方法,每个集合类型可用的功能都变得模糊了。
通常,当您认为可能需要对集合进行子类化以使用virtual
扩展点时,Collection<T>
很有用。对于WCF,这不是一个真正的选项。
如前所述,除非使用程序集共享,否则不能使用IList<T>
等,因为生成的类将无法创建集合。
发布于 2009-02-27 12:14:01
您不能在数据契约中使用接口类型,因为序列化程序不能使用接口类型属性。
你可以使用具体的类型,例如MyClass[]或List
发布于 2009-02-27 12:39:15
除了不能使用接口类型之外,使用哪种集合类型也无关紧要。您的服务的客户端将永远不会看到它们。
请记住,web服务以WSDL或mex的形式向客户端提供了服务的描述。在使用WSDL的情况下,客户端将接收描述要发送和接收的消息的XML模式。在集合的情况下,客户端只会看到一个maxOccurs=为“unbounded”的元素,而不是maxOccurs=为“1”的元素。客户端可能会将其解释为数组、列表或其他任何形式。无论您从服务返回哪个集合,客户端都会看到maxOccurs=是“无界的”,并随心所欲地解释它。
例外情况是返回某种类型的字典,我不知道这是如何工作的。
https://stackoverflow.com/questions/594499
复制相似问题