Есть ли способ скрыть / сгладить базовые типы в контрактах с данными службы 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>
Класс к сервису, таким образом, каковы мои варианты?
- DTO для класса Employee - я бы не стал добавлять эту сложность
- "Свести" иерархию DataContract, чтобы контракт данных для Employee не раскрывал, что он наследуется от
Base<T>
, Это возможно? Как? - Другое решение?
Благодарю.
1 ответ
Решение
Каждый класс в hiearchy должен быть сериализуемым / DataContract. Если вы не хотите показывать hiearchy, вы должны использовать DTO или вы можете попробовать реализовать IDataContractSuroggate для вашего класса Employee.