2010-08-17 2 views
2

Prenons l'exemple simple suivant:Est-il possible de masquer/aplatir les types de base dans les contrats de données de service 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 
} 

La classe de base de base n'a pas de propriétés d'intérêt pour les consommateurs de services WCF, mais WCF me force à annoter aussi la classe de base avec un attribut [DataContract]. Cela apparaît essentiellement sur le client de service comme Employee : EmployeeBase avec EmployeeBase étant une classe vide sans propriétés.

Je ne veux pas exposer la classe Base<T> au service de cette façon, alors quelles sont mes options?

  1. DTO pour la classe des employés - Je préfère ne pas ajouter cette complexité
  2. « Aplatir » la hiérarchie DataContract de telle sorte que le contrat de données pour l'employé n'expose pas qu'il hérite de Base<T>. Est-ce possible? Comment?
  3. Autre solution?

Merci.

+0

Cela a été d'une grande aide – Arnej65

Répondre

3

Chaque classe de la hiérarchie doit être sérialisable/DataContract. Si vous ne voulez pas exposer hiearchy vous devez utiliser DTO ou vous pouvez essayer d'implémenter IDataContractSuroggate pour votre classe Employee.

+0

On dirait DTO ou simplement accepter que l'objet de base sera exposé. En fait, je suis tombé sur cette question, qui, je suppose, fait mienne un doublon: http://stackoverflow.com/questions/658361/wcf-serialization-with-object-inheritance – WayneC

Questions connexes