2012-11-27 31 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合约无关。

相关问题