客戶端和服務(wù)之間要能夠進(jìn)行成功的通訊,并不一定要求通訊的雙方都具有相同的類型,只需要通訊雙方的類型具有等價(jià)的數(shù)據(jù)契約就可以了。如果Data Contract滿足以下條件,我們說它們是等價(jià)的:
1 具有相同的名稱和命名空間 你可以通過DataContractAttribute的Name和Namespace屬性指定(注意其值是大小寫敏感的)。缺省的命名空間是:http://schemas.datacontract.org/2004/07/Clr.Namespace。(你也可以通過ContractNamespaceAttribute來為不包含delegate聲明的整個(gè)模塊或Assembly中的所有數(shù)據(jù)契約來修改此缺省值。)一般情況下缺省的數(shù)據(jù)契約名稱是類型的名稱,但如果是泛型類型的話,缺省的數(shù)據(jù)契約名稱是由以下四部分依次連接組成: 1 泛型類型名稱
2 Of
3泛型類型參數(shù)的數(shù)據(jù)契約名稱(如果是多個(gè)參數(shù)就按參數(shù)順序依次連接)
4 根據(jù)泛型參數(shù)的數(shù)據(jù)契約的命名空間計(jì)算出來的哈希值(如果泛型參數(shù)全部是基本類型的話,此部分忽略)。
如果通過DataContractAttribute的Name屬性來為泛型類型指定數(shù)據(jù)契約名稱時(shí),你可以在Name屬性值中使用{0}來指定泛型的第一個(gè)參數(shù)的數(shù)據(jù)契約名稱,{1}就是第二個(gè)泛型參數(shù)的,依次類推。{#}表示通過泛型參數(shù)的數(shù)據(jù)契約命名空間計(jì)算出來的哈希值。(注:必須要有{}哦)
2 包含相同的數(shù)據(jù)契約成員(注意其值是大小寫敏感的) 數(shù)據(jù)契約成員缺省的名稱是類型的字段或?qū)傩缘拿Q。你可以通過DataMemberAttribute的Name屬性來設(shè)置成你所希望的值。
3 數(shù)據(jù)契約成員的順序必須相同 數(shù)據(jù)契約成員的順序按照以下規(guī)則進(jìn)行依次排序:
1 基類數(shù)據(jù)契約成員
2 DataMemberAttribute中不含Order屬性的成員,根據(jù)數(shù)據(jù)契約成員的名稱按照字母排序
3 DataMemberAttribute中含有Order屬性的成員,先按照Order的順序排序,如果Order的屬性值相同的根據(jù)數(shù)據(jù)契約成員的名稱按照字母排序
|