Gibt es eine Möglichkeit, um hide / Flatten Basistypen in WCF-Dienst Datenverträge?
-
29-09-2019 - |
Frage
Betrachten Sie das folgende einfache Beispiel:
[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
}
Die Basisklasse Basis hat keine Eigenschaften von Interesse für die WCF-Dienst Verbraucher, sondern WCF zwingt mich auch mit einem [Datacontract] Attribute der Basisklasse mit Anmerkungen versehen. Dies resultierte im Wesentlichen zeigt sich auf dem Service-Client als Employee : EmployeeBase
mit EmployeeBase
eine leere Klasse ohne Eigenschaften zu sein.
Ich habe nicht die Base<T>
Klasse in den Dienst auf diese Weise verfügbar machen möchten, so was sind meine Optionen?
- DTO für die Employee-Klasse - ich möchte lieber nicht, diese Komplexität hinzufügen
- „Flatten“ die Datacontract Hierarchie, so dass der Datenvertrag für Mitarbeiter aussetzen nicht, dass es von
Base<T>
erbt. Ist das möglich? Wie? - Andere Lösung?
Danke.
Lösung
Jede Klasse in hiearchy hat serializable / Datacontract sein. Wenn Sie nicht aussetzen hiearchy wollen, müssen Sie DTO verwenden, oder Sie können versuchen, IDataContractSuroggate für Ihre Mitarbeiter Klasse zu implementieren.