我有一個DataMember屬性的基類。我也有一個帶有DataMember屬性的派生類。在我的WCF項目中,我返回派生類。有沒有辦法阻止我的基類中的成員序列化?下面是一些示例代碼:WCF DataContract從派生類中序列化排除數據成員
public class BaseClass
{
public string ShortDescription {get;set;}
public string LongDescription {get;set;}
}
public class DerivedClass : BaseClass
{
public List<Description> Descriptions {get;set;}
}
在這段代碼我希望能夠隱藏繼承的成員SHORTDESCRIPTION和LongDescription,因爲他們現在已經過時。任何嘗試這樣做都不成功。這是我曾嘗試:
public class DerivedClass : BaseClass
{
[DataMember]
public List<Description> Descriptions {get;set;}
// override the base class members
[IgnoreDataMember]
public override string ShortDescription {get;set;}
[IgnoreDataMember]
public override string LongDescription {get;set;}
}
和
public class DerivedClass : BaseClass
{
[DataMember]
public List<Description> Descriptions {get;set;}
// shadow the base class members
[IgnoreDataMember]
public new string ShortDescription {get;set;}
[IgnoreDataMember]
public new string LongDescription {get;set;}
}
這兩種方法都不工作過。輸出到WSDL時,「DerivedClass」類型仍包含基類類型的「忽略」成員。
你可能想知道爲什麼我不只是改變基類。這是因爲我仍然使用原始形式的基類作爲WSDL類型的以前版本,以支持消費者的向後兼容性。以這種方式,我可以有一個返回BaseClass的v1000調用和一個返回DerivedClass的V1010調用。我可以根據需要添加和更改DerivedClass的功能,而不會影響v1000功能的消費者。
這產生了相同的結果。有趣的是,如果我執行覆蓋並提供[DataMember]屬性以試圖讓它顯示在DerivedClass的XML定義中,它仍然不會顯示在DerivedClass中,而是顯示在基類中。 – omatase 2010-08-26 20:01:16
Hrmmpf ...是的,這不起作用;) – Kwal 2010-08-26 20:26:32