2011-09-20 61 views
0

我在我的服務器DLL類庫中有這樣的Scneario。在WCF中使用新的關鍵字隱藏基類屬性

[DataContract] 
public class Base 
{ 
    [DataMember] 
    public string Info { get; set; } 
} 

[DataContract] 
public class Child : Base 
{ 
    [DataMember] 
    public new int Info { get; set; } 


    public int Save() 
    { 

    } 
} 

我在客戶端的WCF代理創建一個引用類。它將「Info」重命名爲「Info1」。並顯示適當的屬性在基類。我的代碼編譯偉大。到現在爲止還挺好。當我嘗試從我的客戶端運行ChildProxy.Save()它給了我錯誤說

「,而試圖序列參數http://tempuri.org/:info有一個錯誤,該消息的InnerException是「類型‘ClientServiceLayer.InfoService.Info’數據合同不需要名稱'ArrayOfInfo:http://schemas.datacontract.org/2004/07/Info_DLL'。將未知的靜態類型添加到已知類型列表中 - 例如,使用KnownTypeAttribute屬性或將它們添加到已知類型的列表傳遞給DataContractSerializer'。請參閱InnerException獲取更多詳細信息。 「

如何在WCF中隱藏基類的屬性?

UPDATE:

這裏是關於客戶端

InvoiceServiceClient infoProxy = new InfoServiceClient(); 
invId = invfoProxy.Save(); 
+0

是的,我們有一個服務類這個類調用保存method..so有意不保持它的頂部.. 。這是客戶端的代碼InvoiceServiceClient infoProxy = new InfoServiceClient(); invId = invfoProxy.Save();' – Hakim

回答

1

如前所述here電話:

你不能。雖然Child類是「隱藏」其基類的Info屬性,但該屬性正由串行器讀取。

您可以嘗試向子類添加[DataMember(Name =「Info」)]並查看會發生什麼。

+0

謝謝..我試圖把[DataMember(Name =「Info」)]放在基類中,[DataMember(Name =「Info2」)]放在子類中。現在我可以調用Proxy.Save()...現在不給我任何錯誤。服務器也遵循oop美學。但我仍然在客戶端獲得兩個對象「Info」和「Info1」。我們能做些什麼嗎? – Hakim

0

你可以使用KnownType屬性DataContract

MSDN Data Contract Known Types

+0

是的,我們試過了。給我們同樣的錯誤。但是現在我們在隱藏屬性上保留了[DataMember(Name =「Info」)]和KnownType ..但是它仍然顯示了我的對象中的「Info」和「Info1」。然而,我們必須忍受MS正在加入..謝謝.. – Hakim