哪种列表/集合类型最适合在 WCF 数据协定中使用?
Posted
技术标签:
【中文标题】哪种列表/集合类型最适合在 WCF 数据协定中使用?【英文标题】:Which list/collection type is best to use in a WCF data contract? 【发布时间】:2010-10-10 07:39:13 【问题描述】:在定义 WCF 数据协定时,应将哪种类型用于集合/列表?
应该是ICollection【问题讨论】:
【参考方案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 应用程序