2010-01-20 48 views
0

下面的概念是可能的,還是會將序列化到客戶端時遇到問題。假設所有通信都只處理BaseContractClasses,但服務器使用特殊子類來整理額外的僅服務器數據。創建WCF DataContract類的僅服務子類

[DataContract] 
public class BaseContractClass 
{ 
    [DataMember] 
    public int valueToTransmit; 
} 

public class ServiceOnlyContractClass : BaseContractClass 
{ 
    public int valueNotToTransmit; 
} 

回答

0

這個新類ServiceOnlyContractClass將繼承它的基類中的所有領域和一切,但因爲它沒有任何[DataContract]或[數據成員]屬性,它不會在您的服務合同顯示( WSDL/XSD)。

如果這就是你想要的,是的,這是做到這一點的方法。 DataContract和DataMember屬性是特定的,例如,你必須明確地設置它們,它們不會被繼承到派生類。

UPDATE: .NET 3.5 Service Pack 1引入了一套新的WCF DataContractSerializer的規則,它看起來好像任何公共類和其任何公共財產將由DCS作爲.NET 3.5序列化SP1。這是爲了簡化生活並允許POCO(普通舊CLR對象)類的序列化,而沒有用屬性裝飾它們 - 但同時,如果不想要關閉該功能的方式似乎不存在它.....

欲瞭解更多詳情,請參閱DataContracts without attributes

+0

但可以在客戶端處理不知道有關ServiceOnlyContractClass?即使發送了SeriveOnlyContractClass,它是否可以重組爲BaseContractClass?我認爲它可能會嘗試序列化爲: .. Nicholas 2010-01-20 06:30:04

+0

如果該類型未序列化到您的DataContract中,則客戶端將不會**知道它。期。如果您沒有將該類型序列化到您的合同中,則不能在任何方法調用中將其用作參數。如果你想使用這個類,但是阻止使用單個元素(「valueNotToTransmit」),只是不要公開這個值,也不要將[DataMember]放到它上面。 – 2010-01-20 06:38:20