如何在 WCF 数据协定中传递强类型 class 引用

How to pass strongly typed class reference in WCF data Contract

我有 WCF 的数据合同,它有自定义 class 变量引用,我想知道我是否需要在配置或其他方面做任何额外的事情。即地址数据

会员class

[DataContract]
public class MemberData : IIdentifiableEntity
{
    [DataMember]
    public int MemberID { get; set; }

    [DataMember]
    public string Title { get; set; }

    [DataMember]
    public string Surname { get; set; }

    [DataMember]
    public string Forename { get; set; }

    [DataMember]
    public string MiddleName { get; set; }

    [DataMember]
    public string PrevSurname { get; set; }

    [DataMember]
    public System.DateTime DOB { get; set; }

    [DataMember]
    public string Sex { get; set; }

    [DataMember]
    public AddressData Address { get; set; }

    [DataMember]
    public ContactDetailData ContactDetail { get; set; }

    [DataMember]
    public MembershipData Membership { get; set; }

    int IIdentifiableEntity.EntityId
    {
      get { return MemberID; }
      set { MemberID = value; }
    }
}

地址class

 public class AddressData
{
    public int MemberID { get; set; }

    public int AddressType { get; set; }

    public string AddressLine1 { get; set; }

    public string AddressLine2 { get; set; }

    public string AddressLine3 { get; set; }

    public string PostCode { get; set; }

    public string City { get; set; }

    public string County { get; set; }

    public string Town { get; set; }

    public string Country { get; set; }

    public MemberData Member { get; set; }
}

do I need to do anything additional

虽然您不需要使用 DataMember 属性来装饰您的服务类型(WCF 仍会序列化它们,只要它们仅包含可序列化类型),您通常仍应使用该属性。

来自:

  • without [DataContract], you cannot define an XML namespace for your data to live in
  • without [DataMember], you cannot serialize non-public properties or fields
  • without [DataMember], you cannot define an order of serialization (Order=) and the DCS will serialize all properties alphabetically
  • without [DataMember], you cannot define a different name for your property (Name=)
  • without [DataMember], you cannot define things like IsRequired= or other useful attributes
  • without [DataMember], you cannot leave out certain public properties - all public properties will be serialized by the DCS