Прежде всего, вам нужно поставить [DataContract]
на каждый класс, который вы хотите сериализовать и десериализовать с помощью WCF - он не автоматически наследуется!
[DataContract]
class Parent
{
.....
}
[DataContract]
class Child : Parent
{
.....
}
Если вы имеете дело с коллекциями вещей, то вам может потребоваться проверить CollectionDataContract
:
[CollectionDataContract]
[KnownType(typeof(Parent))]
[KnownType(typeof(Child))]
public class CustomCollection : List<Parent>
{
}
Кроме того, WCF и SOA в целом немного отличаются от ООП и не очень хорошо справляются с наследованием. Скорее всего, вам придется помещать атрибуты [ServiceKnownTypes]
или [KnownType]
в контракты на обслуживание в тех местах, где вы хотите использовать и поддерживать полиморфизм.
Таким образом, если у вас есть сервисный метод, который принимает Parent
, но также должен иметь возможность принимать и экземпляр Child
, тогда вам нужно украсить метод атрибутом [KnownType]
, чтобы сделать эту информацию доступной в WCF.
См. Документацию MSDN в атрибуте KnownType или ознакомьтесь с другим SO вопросом по теме.
Марк