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

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

[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 ответ

Решение

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

Другие вопросы по тегам