2011-12-28 71 views
0

我如何避免暴露我的基類和它的成員,當我公開我的員工DTO, (當我做添加服務引用應該沒有提及組織類/它的成員)。WCF DataContract隱藏基類

[Serializable] 
    public abstract class Organization 
    { 
     public string Id{ get; set; } 
     public string SSN{ get; set; } 
    } 

    [DataContract][Serializable] 
    public class Employee :Organization 
    { 
     [DataMember] 
     public string FirstName { get; set; } 
     [DataMember] 
     public string LastName { get; set; } 
    } 

回答

3

要做到這一點,你需要將Employee合同進行分成一個接口,通過服務揭露它。

[Serializable] 
public abstract class Organization 
{ 
    public string Id { get; set; } 
    public string SSN { get; set; } 
} 

[DataContract] 
public interface IEmployee 
{ 
    [DataMember] 
    string FirstName { get; set; } 
    [DataMember] 
    string LastName { get; set; } 
} 

[Serializable] 
public class Employee : Organization, IEmployee 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

定義服務爲返回的IEmployee,並簡單地返回一個具體Employee實例。

+0

重複類是唯一的方法? – 2011-12-28 02:41:50

+0

你不重複這個類,你正在使用接口來定義*完全*服務提供的內容。是的,它看起來很相似,但它是一個完全不同的概念。 – 2011-12-28 02:51:29

+0

@AdamMaras - 如果你不打算定義一個穩定的實現,爲什麼還要定義'IEmployee'呢? – 2011-12-28 03:31:32

0

從兩個類中刪除[Serializable]屬性,你應該沒問題。如果您使用[DataContract] attribue,則在創建代理時只有具有[DataMember]屬性的屬性/文件將可用。

+0

但我需要我的類可序列化,因爲我堅持它在視圖狀態 – 2011-12-28 13:29:21