WCF集合反序列化具體操作技巧分享
我們今天將會在這篇文章中為大家詳細介紹一下有關WCF集合反序列化的相關操作技巧。希望對于剛剛接觸WCF的朋友們能夠從中獲得一些幫助,并加深我們對WCF開發插件的理解程度。
缺省情況下,使用Svcutil.exe生成客戶端代理時,列表集合將反序列化成數組,字典集合將反序列化成Dictionary泛型。我們也可以通過/collectionType命令行開關(簡寫形式是 /ct)來指定我們希望WCF集合反序列化的集合類型(請記住,您還必須使用 /reference 開關(簡寫形式是 /r)指定引用的集合類型的程序集)。如果該類型是泛型,則必須在類型后面跟有反引號和泛型參數的數目。例如前面的例子中的Customer1類可以通過下面的命令在客戶端使用List泛型:
- SvcUtil http://localhost:8000/
- /r:C:"WINDOWS"Microsoft.NET"Framework"v2.0.50727"System.dll
- /ct:System.Collections.Generic.List`1
DataContractAttribute和CollectionContractAttribute
對于集合而言,WCF框架將隱含地自動的為集合類型應用CollectionDataContractAttribute屬性的,這就是為什么你不需要為集合應用任何屬性就可以在數據契約中使用的原因。但要注意:
如果我們新建的集合類型是繼承已有的集合類型如List<string>,那么我們就不能對新建的集合類型應用DataContractAttribute,否則運行時會拋出InvalidDataContractException,但你可以應用CollectionDataContractAttribute來定制集合類型的數據契約。例如
- [DataContract]public class MyList:List<string>{…}
的集合定義將拋出異常。#t#
如果我們新建的集合類型是實現了集合接口例如IList<int>,IDictionary<int,int>的話,我們可以對此類型應用DataContractAttribute屬性,這樣的話此類型將作為普通的數據契約類型,而不是將其作為集合類型來處理。也就是WCF框架將只序列化其中應用了DataMemberAttribute屬性的成員。當然你也可以不應用任何屬性來讓系統缺省作為集合類型來處理。(你也可以使用CollectionDataContractAttribute來定制數據契約)
針對應用CollectionDataContractAttribute屬性或者缺省不應用任何屬性的集合類型,如果其內部有應用了DataMemberAttribute的屬性或字段,在序列化時系統將忽略。
以上就是對WCF集合反序列化的相關介紹。