Есть ли способ скрыть / сгладить базовые типы в контрактах данных службы 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. Другое решение?

Спасибо.


person WayneC    schedule 17.08.2010    source источник


Ответы (1)


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

person Ladislav Mrnka    schedule 17.08.2010
comment
Похоже на DTO или просто принятие того, что базовый объект будет открыт. На самом деле, я только что наткнулся на этот вопрос, который, я думаю, делает мой дубликат: stackoverflow.com/questions/658361/ - person WayneC; 18.08.2010