在定義WCF數據契約時,哪種類型應該用於集合/列表?哪個列表/集合類型最適合在WCF數據合同中使用?
- 它應該是ICollection的<牛逼>, IList的<牛逼>,T []還是...?
- 我應該使用接口類型還是具體類型?
- 需要考慮什麼樣的折衷?
在定義WCF數據契約時,哪種類型應該用於集合/列表?哪個列表/集合類型最適合在WCF數據合同中使用?
注意:我從客戶端的角度回答了這個問題 - 即/collectionType:<type>
開關svcutil.exe
(也可在IDE中使用)。
我個人傾向於保持簡單並使用List<T>
。如果你打算做大量的數據綁定,BindingList<T>
可能是一個選項,但對於對象屬性,它通常是矯枉過正的。數組使生活變得非常艱難...避免它們; -p
請注意,對於每個集合類型可用的功能模糊的.NET 3.5,由於Enumerable
上的擴展方法。
通常,Collection<T>
在您認爲您可能想要繼承該集合以使用virtual
擴展點時非常有用。這不是WCF的選擇。
如前所述,除非您使用程序集共享,否則使用IList<T>
等不是一個選項,因爲生成的類將無法創建集合。
您不能在datacontract中使用接口類型,因爲序列化程序不能使用接口類型屬性。
您可以使用混凝土類型,例如MyClass []或列表
除了不能使用接口類型這一事實外,使用哪種集合類型並不重要。你的服務的客戶永遠不會看到他們。
請記住,Web服務根據WSDL或mex提供對客戶端服務的描述。在WSDL的情況下,客戶端將收到描述要發送和接收的消息的XML模式。在集合的情況下,客戶端只會看到一個maxOccurs =「unbounded」的元素,而不是maxOccurs =「1」的元素。客戶端可能會將其解釋爲數組,列表或其他內容。無論您從服務中返回哪個集合,客戶端都會看到maxOccurs =「unbounded」並按照它的喜好進行解釋。
這個例外會返回某種類型的字典,我不知道它是如何工作的。
哪種類型最適合使用? – JacobE 2009-02-27 12:33:02