2016-04-19

WCF序列化集合型別建議


於某個WCF Service傳入物件時,遇到了此錯誤:
無法序列化型別 'System.Linq.Enumerable+WhereEnumerableIterator`1[System.String]'。請考慮以 DataContractAttribute 屬性標記該型別,並以 DataMemberAttribute 屬性標記該型別要序列化的所有成員。如果該型別是集合,請考慮以 CollectionDataContractAttribute 標記該型別。如需其他支援型別,請參閱 Microsoft .NET Framework 文件。
原因出在該物件有一型別 IEnumberable的DataMember,造成無法序列化的錯誤,經縮小範圍實驗的結果,將該Collection的型別從IEnumberable換為List(IList)即可避免此錯誤。

MSDN文章上可知:IEnumberable使用GetEnumerator()做為序列化的呼叫Method,而IList是用indexer,因此小弟猜測是某些預設的序列化動作不同所致;因此若要與WCF溝通集合型別的傳遞,建議還是以List優於IEnumberable。

【延伸閱讀】

沒有留言:

張貼留言

引用 Topshelf 無法進行偵錯的經驗

Topshelf  是一個可以簡化撰寫 Windows Service 的套件,引用之後,我們只要當作撰寫一般 Console 的應用程式就可以。 只是近來撰寫上遇到無法進行Debug的狀況,在Visual Studio一進行偵錯可以看到Console 程式被執行,並顯示...