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

Posted

技术标签:

【中文标题】哪种列表/集合类型最适合在 WCF 数据协定中使用?【英文标题】:Which list/collection type is best to use in a WCF data contract? 【发布时间】:2010-10-10 07:39:13 【问题描述】:

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

应该是ICollection, IList、T[] 还是...? 我应该使用接口类型还是具体类型? 需要考虑哪些权衡?

【问题讨论】:

【参考方案1】:

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

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

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

通常,Collection<T> 在您认为可能希望将集合子类化以使用 virtual 扩展点时很有用。这不是 WCF 的真正选项。

如前所述,除非您使用程序集共享,否则不能使用 IList<T> 等,因为生成的类将无法创建集合。

【讨论】:

【参考方案2】:

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

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

【讨论】:

什么时候最好用什么类型?【参考方案3】:

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

请记住,Web 服务以 WSDL 或 mex 的形式向客户端提供服务描述。在 WSDL 的情况下,客户端将收到一个 XML Schema,描述要发送和接收的消息。在集合的情况下,客户端只会看到 maxOccurs="unbounded" 的元素,而不是 maxOccurs="1" 的元素。客户端可以将其解释为数组、列表或其他任何内容。无论您从服务返回哪个集合,客户端都会看到 maxOccurs="unbounded" 并根据需要对其进行解释。

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

【讨论】:

以上是关于哪种列表/集合类型最适合在 WCF 数据协定中使用?的主要内容,如果未能解决你的问题,请参考以下文章

哪种 json 样式最适合 Android + iOS 应用程序

添加服务引用时出错:类型是不支持的递归集合数据协定

哪种数据类型最适合 c++ 中节俭通信中的日期时间?

哪种 .NET 数据类型最适合在 NHibernate 中映射 NUMBER Oracle 数据类型?

哪种数据类型最适合将图像保存在数据库中?

WCF 和嵌套数据协定