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。

怎么可能??

4

2 回答 2

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)] 属性,以将多态对象作为操作协定参数传递。这绝对不是你的情况。

于 2012-11-27T21:17:10.793 回答
0

应用于类的契约为您的服务提供服务元数据(服务类只能使用修饰类作为服务方法中的参数类型)。因此 - 如果您想从现有属性中组合某种类型(类) - 这与 WCF 合同无关。

于 2012-11-27T08:31:09.610 回答