J'ai une classe, ReportDef
, qui est une classe concrète que j'ai décorée avec les attributs [DataContract]
et [DataMember]
selon les besoins. ReportDef
est dans l'assemblage A1
avec mes ServiceContract
, IReportService
. J'ai alors une autre classe, UiReportDef
, qui dérive de ReportDef
et est dans l'assemblée A2
. UiReportDef
n'a aucun état supplémentaire que le service se soucie de.WCF Héritage/Polymorphisme et Sérialisation
Je souhaite appeler mon service avec une instance de UiReportDef
. Y a-t-il un moyen (à moins de construire manuellement une instance ReportDef
à partir de UiReportDef
) pour ce faire sans que mon service soit au courant de A2
? Je connais environ KnownType
. Je ne veux pas faire référence à A2
.
EDIT: Voici est un contexte qui pourrait rendre ma question plus facile à comprendre. Mon ServiceContract
implémente IReportService
qui définit une méthode, RunReport(ReportDef report)
. ReportDef
est décoré avec l'attribut DataContract
et a des membres privés décorés avec DataMember
. UiReportDef
est dans un assembly qui dépend des assemblages liés à l'interface utilisateur, etc. Je n'ai pas conçu la hiérarchie de classes existante. Je dois passer ReportDefs
et UiReportDefs
(comme ReportDefs
) au nouveau service. Puisque ReportDef
est concret, je m'attendrais à ce que le sérialiseur traite UiReportDefs
comme ReportDefs
en l'absence de toute autre information.
Pour l'instant, j'ajoute un constructeur à la classe de base qui prend une instance de lui-même et copyies l'État concerné. Très moche mais je dois aller de l'avant. – JohnOpincar