2011-05-03 37 views
2

我試圖序列化我的數據層對象。這些是具有屬性,方法和對象集合的複雜對象。使用DataContract/Data成員爲WCF序列化對象

所有的類都從一個基類中繼承,它被序列化。

[DataContract] 
    [KnownType(typeof(Person))] 
    [KnownType(typeof(Client))] 
    [KnownType(typeof(Professional))] 
    [KnownType(typeof(ProfessionalApptHistory))] 
    [KnownType(typeof(DailySchedule))] 
    [KnownType(typeof(Option))] 
    [KnownType(typeof(PersonType))] 
    [KnownType(typeof(ProfessionClientInteractionType))] 
    [KnownType(typeof(ProfessionalClientInteractions))] 
    [KnownType(typeof(ProfessionalCalendar))] 
    public abstract class CMBase 
    { 
     protected designs3_OurTimeEntities _entities = new designs3_OurTimeEntities(); 
     [DataMember()] 
     public abstract bool IsPersisted { get; internal set; } 
    } 

我有一類人也得到系列化

[DataContract(Name = "Person")] 
    [KnownType(typeof(Professional))] 
    [KnownType(typeof(Client))] 
    public abstract class Person : CMBase 
    { 
     [DataMember()] 
     public int PersonId { get; internal set; } 
     [DataMember()] 
     public int PersonTypeId { get; set; } 
     [DataMember()] 
     public string Name { get; set; } 
     [DataMember()] 
     public string ContactNumber { get; set; } 
     [DataMember()] 
     public string ImageLocation { get; set; } 
     [DataMember()] 
     public Bitmap Image { get; internal set; } 
     [DataMember()] 
     public Guid MembershipUserId { get; internal set; } 
     [DataMember()] 
     public DateTime? ActivationStartDate { get; internal set; } 
     [DataMember()] 
     public string Email { get; internal set; } 
     [DataMember()] 
     public string Zip { get; set; } 
     [DataMember()] 
     public bool ShowDefaultPage { get; set; } 
     [DataMember()] 
     public bool IsClient { get; internal set; } 

     [DataMember()]   
     public override bool IsPersisted 
     { 
      get 
      { 
       if (this.PersonId == 0) 
       { 
        return false; 
       } 
       else 
       { 
        return true; 
       } 
      } 
      internal set 
      { 
       throw new NotImplementedException(); 
      } 
     } 

... }

然後我有這個類doenst得到系列化

[DataContract(Name = "Professional")] 
    public class Professional : Person 
    { 
     [DataMember()] 
     public DateTime DateStartedInProfession { get; set; } 
     [DataMember()] 
     public int? ShopId { get; set; } 
     [DataMember()] 
     public DateTime LastPayment { get; set; } 
     [DataMember()] 
     public DateTime NextPaymentDate { get; set; } 
     [DataMember()] 
     public DateTime TerminationDate { get; set; } 
     [DataMember()] 
     public int? Rating { get; internal set; } 
     [DataMember()] 
     public bool hasSystemAccess { get; internal set; } 
     [DataMember()] 
     public List<SaveResult> SaveResults { get; internal set; } 
... 
} 

我也有其他類沒有序列化,我不明白髮生了什麼。

回答

0

變化

[DataMember()] 
public int? ShopId { get; set; } 

[DataMember()] 
public Nullable<int> ShopId { get; set; } 

我敢肯定,可空得到的序列化,我不是100%肯定這是你唯一的問題雖然。

+0

我改變了可空類型,所以它們不能爲空,所以它們像這樣讀取[DataMember()] public int ShopId {get;組; }。當我更新服務引用時,它仍然沒有序列化。基類繼承有問題嗎? – ChampChris 2011-05-03 17:17:31

+1

'int?'是由編譯器處理的可爲空的的語法糖。序列化程序應該沒有明顯的區別。 – 2014-08-18 09:21:52