我有一个包含DataMember属性的基类,还有一个包含DataMember属性的派生类。在我的WCF项目中,我返回了派生类。有没有办法防止我的基类中的成员被序列化?下面是一些示例代码:
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”类型仍包含基类类型的“Ignored”成员。
你可能会想为什么我不改变基类。这是因为我仍然使用基类以其原始形式作为WSDL的先前版本,以支持消费者的向后兼容性。通过这种方式,我可以拥有一个返回BaseClass的v1000调用和一个返回DerivedClass的V1010调用。我可以添加和更改DerivedClass的功能而不会影响v1000功能的消费者。