У меня есть базовый класс со свойствами 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;}
}
Ни один из этих подходов не сработал.Тип «DerivedClass» при выводе в WSDL по-прежнему содержит «игнорируемые» члены типа базового класса.
Вы можете удивиться, почему я не просто изменяю базовый класс.Это потому, что я все еще использую базовый класс в его первоначальном виде в качестве предыдущей версии типа для WSDL для поддержки обратной совместимости для потребителей.Таким образом, у меня может быть вызов v1000, который возвращает BaseClass, и вызов V1010, который возвращает DerivedClass.Я могу добавлять и изменять функциональные возможности в DerivedClass все, что мне нужно, без потенциального влияния на потребителей функциональности v1000.