我有一个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