2012-11-27 68 views
0

如何調用三個數據合同對象並在單個對象中創建它?如何在一個對象中繼承三個數據契約?

我有一個數據合同類這樣

[Serializable] 
    [DataContract] 
    public class Address 
    { 
     [DataMember] 
     public long AddressId { get; set; } 
} 

另一個數據合同類像

[Serializable] 
    [DataContract] 
    public class Email 
    { 
     [DataMember] 
     public long EmailId { get; set; } 
    } 

另一個數據合同類像

[Serializable] 
    [DataContract] 
    public class Phone 
    { 
     [DataMember] 
     public long PhoneId { get; set; } 
    } 

現在我想用AddressId ,EmailId,PhoneId以相同的方法。

怎麼可能?

+0

你是什麼意思*調用三個數據合約對象*?數據契約定義了數據結構(作爲類) - 不是代碼 - 因此不能被調用* ....你能展示一個你想要做什麼的例子嗎? –

+0

它可能嗎? –

+2

這些是三個不同的類 - 所以如果你的服務方法需要所有三個類,你需要傳遞三個參數'公共無效MyServiceMethod(地址,電子郵件,電話電話)' –

回答

1

請注意,只保留[DataContract]屬性,您也不需要用Serializable裝飾

嘛,一個有WCF數據契約下列選項:

複合數據合同。

標記爲DataMember的任何類的成員字段也可以是數據協定,一旦它們也用DataContract屬性修飾。所有嵌套數據合同的聚合說明了數據合同本質上是遞歸的事實。 WCF會檢測對象圖中所有數據協定啓用的屬性並捕獲它們的狀態。

[DataContract] 
class Address 
{ 
    [DataMember] 
    public long AddressId { get; set; } 
} 

// The same for the rest two, and then an aggregating type. 

[DataContract] 
class Contact 
{ 
    [DataMember] 
    public Address Address {get;set;} // here we go 

    [DataMember] 
    public Email Email {get;set;} 

    [DataMember] 
    public Phone Phone {get;set;} 
} 

數據合同層次

你的數據合同類可能是另一個數據合同類的子類,在這裏你只需要明確禁止在給定數據合同,即指定DataContract上每個類型在層次結構樹中。

[DataContract] 
class ContactDetails 
{ 
    [DataMember] 
    public long AddressId { get; set; } 

    // you could move the phone and email details here too. 
} 

[DataContract] 
class Contact : ContactDetails 
{ 
    [DataMember] 
    public string Name { get; set; } 
} 

對於每一個你不能有三個獨立的類,並且在.Net中一次從它們繼承。我的建議是你的第一個案例 - 那就是數據合同聚合。

加分:多態型參考。

在基本類型上應用[KnownType(Type type)]屬性以傳遞多態對象作爲操作契約參數。這絕對不是你的情況。

0

合同應用於爲您的服務提供服務元數據的類(服務類只能使用裝飾類作爲服務方法中的參數類型)。所以 - 如果你想從現有的屬性組成一些類型(類) - 這與WCF合約無關。

相關問題