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

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

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

【问题讨论】:

    标签: .net wcf datacontract


    【解决方案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" 并根据需要对其进行解释。

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

      【讨论】:

        猜你喜欢
        • 2010-10-07
        • 2016-11-19
        • 1970-01-01
        • 2011-07-26
        • 2014-02-14
        • 2021-11-16
        • 2012-03-02
        • 1970-01-01
        • 2015-07-09
        相关资源
        最近更新 更多