Есть ли способ скрыть / сгладить базовые типы в контрактах с данными службы WCF? - PullRequest
2 голосов
/ 17 августа 2010

Рассмотрим следующий простой пример:

[DataContract("{0}Base")]
public class Base<T> where T : Entity<T>
{
    // Common methods & properties.  No WCF exposed properties
}

[DataContract]
public class Employee : Base<Employee>
{
    // WCF exposed properties
}

Базовый класс Base не имеет свойств, представляющих интерес для потребителей услуг WCF, но WCF заставляет меня также аннотировать базовый класс атрибутом [DataContract]. По существу, это проявляется на клиенте службы как Employee : EmployeeBase, где EmployeeBase - пустой класс без свойств.

Я не хочу предоставлять сервису класс Base<T> таким образом, каковы мои варианты?

  1. DTO для класса Employee - я бы не стал добавлять эту сложность
  2. «Свести» иерархию DataContract, чтобы контракт данных для Employee не раскрыл, что он наследуется от Base<T>. Это возможно? Как?
  3. Другое решение?

Спасибо.

1 Ответ

3 голосов
/ 17 августа 2010

Каждый класс в hiearchy должен быть сериализуемым / DataContract.Если вы не хотите показывать hiearchy, вам нужно использовать DTO или вы можете попробовать реализовать IDataContractSuroggate для вашего класса Employee.

...