2009-02-27 64 views

回答

13

注意:我從客戶端的角度回答了這個問題 - 即/collectionType:<type>開關svcutil.exe(也可在IDE中使用)。

我個人傾向於保持簡單並使用List<T>。如果你打算做大量的數據綁定,BindingList<T>可能是一個選項,但對於對象屬性,它通常是矯枉過正的。數組使生活變得非常艱難...避免它們; -p

請注意,對於每個集合類型可用的功能模糊的.NET 3.5,由於Enumerable上的擴展方法。

通常,Collection<T>在您認爲您可能想要繼承該集合以使用virtual擴展點時非常有用。這不是WCF的選擇。

如前所述,除非您使用程序集共享,否則使用IList<T>等不是一個選項,因爲生成的類將無法創建集合。

1

您不能在datacontract中使用接口類型,因爲序列化程序不能使用接口類型屬性。

您可以使用混凝土類型,例如MyClass []或列表

+0

哪種類型最適合使用? – JacobE 2009-02-27 12:33:02

0

除了不能使用接口類型這一事實外,使用哪種集合類型並不重要。你的服務的客戶永遠不會看到他們。

請記住,Web服務根據WSDL或mex提供對客戶端服務的描述。在WSDL的情況下,客戶端將收到描述要發送和接收的消息的XML模式。在集合的情況下,客戶端只會看到一個maxOccurs =「unbounded」的元素,而不是maxOccurs =「1」的元素。客戶端可能會將其解釋爲數組,列表或其他內容。無論您從服務中返回哪個集合,客戶端都會看到maxOccurs =「unbounded」並按照它的喜好進行解釋。

這個例外會返回某種類型的字典,我不知道它是如何工作的。

相關問題