WCF筆記 泛型與集合資料型別

2021-09-24 12:30:47 字數 1604 閱讀 7657

剛參加完上司的婚禮,感覺很不錯,,婚禮現場像童話一般,,不知道是不是很多女生都憧憬著這樣的一天

還是記錄一下,學習所得

資料契約

首先是資料契約,可能包括有[datacontract] [datamember] ,甚至各樣的操作,

其次就是已知型別,[serviceknowntype] [knowntype] 比較簡單不是這篇的重點

泛型

資料型別

然後就是

在.net framework 2.0中,泛型第一次被引入。我們可以定義泛型介面、泛型型別、泛型委託和泛型方法。序列化依賴於真實具體的型別,而泛型則刻意模糊了具體型別概念。而集合代表一組物件的組合,集合具有可迭代(enumerable)的特性,可以通過某個迭代規則遍歷集合中的每乙個元素。范型型別和集合型別在序列化和反序列化上具有一些特殊的行為和規則,我們繼續下去

1. 首先定義泛型中需要的資料契約

[datacontract]

public class student

} //... 可能還有其他型別

2. 定義泛型型別

[datacontract]

public class school

}

3. 例項化這個泛型物件

略...

4. 序列化泛型物件

serialize>(例項化後的泛型物件, @"school.xml");

之後我們會發現 schoolofstudentjofvlqkh 開頭的xml節點,讓人匪夷所思,仔細發現

會發現它的組成結構是這樣的:+ of + }+

就算我們修改資料契約的名稱會發現雜湊雜湊值依舊沒有任何變化,其實這是ms為了防止命名衝突而為,

切記不要在2步驟將name設死,不過我們可以這樣做 datacontract(name="schoolof")]

這樣元資料發布時我們就可以使用到屬於自己定義的泛型型別了..

集合資料型別

在.net中,所有的集合都實現了ienumerable介面,比如array、hashtable、arraylist

定義與服務端使用就略過了,,

關鍵要記住 datacontractserializer對於ienumerable、array與ilist序列化的結果xml是完全一致的,根節點的名稱以arrayof為字首,後面緊跟集合元素型別對應的資料契約名稱,那麼我們的客戶端在使用時都是student,這可怎麼辦?

這個時候千萬不要忘記了我們身邊的"神器"ide了

這樣我們就可以在客戶端舒舒服服的用這樣的型別了,當然其他的一些在客戶端生成object的,就需要已知型別的參與了

最後就是自定義集合型別了

[collectiondatacontract],

注意三點

1,集合必須是可序列化的,

2 這個可不是我們soa中的datacontract了,

3 要有add方法的支援

泛型與集合型別

說起泛型時,就不得不說到泛型集合型別 因為使用反省能夠極大的提高集合型別的效能和安全性.為了看看使用泛型能為集合型別帶來什麼好處,先看看不用泛型時集合型別的表現 最典型的非泛型集合型別就是 arraylist了,這裡便以它為例作為介紹 考慮一下下面的 arraylist list new array...

集合資料型別

集合用大括號 表示,元素間用逗號分隔 建立集合型別用 或者set 建立空集合型別,必須用set 集合中每個元素必須唯一,不存在相同元素 集合中的元素之間無序 a b a和b中的所有的元素 a b 包含a但是不包含b的元素 a b 同時屬於a和b的元素 a b 包含ab中不相同的元素 a b或a b或...

Python的集合資料型別

元組集合 字典對比 列表 模擬字串 有序元素集合 通過索引訪問 單個索引i 2 區間索引i 3 列表元素型別可不同 l1 l2 合併,連線 l1 2,重複兩次 len l 返回元素個數 x in list 返回true or false l1.sort 排序從小到大 l2.reverse 倒序 l1...