如何调用三个数据契约对象并在单个对象中创建它?
我有一个类似的数据合约类
[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。
这怎么可能??
请,只保留[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中,不可能每个类都有三个独立的类,并同时从中继承。我的建议是第一种情况,即数据契约聚合。
奖励:多态类型参考
对基类型应用[NowType(Type Type)]特性,以便将多态对象作为操作协定参数传递。这绝对不是你的情况。
应用于类的契约,为您的服务提供服务元数据(服务类只能使用装饰类作为服务方法中的参数类型)。因此,如果您想从现有属性中组成某种类型(类),这与WCF合约无关。