我有一个类ReportDef
,这是一个具体的类,我根据需要使用[DataContract]
和[DataMember]
属性进行了修饰。 ReportDef
与我的A1
,ServiceContract
一起在汇编IReportService
中。然后我有另一个类UiReportDef
,它派生自ReportDef
并且在汇编A2
中。 UiReportDef
没有服务关心的其他状态。
我想用UiReportDef
的实例调用我的服务。有没有办法(没有从ReportDef
手动构建UiReportDef
实例)来执行此操作而不让我的服务知道A2
?我知道KnownType
。我不想引用A2
。
编辑:以下是一些可能使我的问题更容易理解的背景信息。我的ServiceContract
实现了IReportService
,它定义了一种方法RunReport(ReportDef report)
。 ReportDef
使用DataContract
属性进行修饰,并使用DataMember
修饰私有成员。 UiReportDef
位于依赖于UI相关程序集等的程序集中。我没有设计现有的类层次结构。我需要将ReportDefs
和UiReportDefs
(作为ReportDefs
)传递给新服务。由于ReportDef
具体,我希望序列化程序在没有任何其他信息的情况下将UiReportDefs
视为ReportDefs
。
答案 0 :(得分:2)
我不明白你的问题。
但是我觉得我现在理解它的一部分,你想反序列化一个没有引用它的程序集中的对象?
如果是这样,除非你愿意进行大量反思并将其定义/引用为“对象”,否则你不能
执行此操作的常用方法是尝试在我之前的答案中解释,您应该使用可由客户端/服务器引用的接口。
通常的做法是创建存根集合,除此之外只包含接口。
或者,正如您对问题的评论所示,您可以使用DTO对象。 http://en.wikipedia.org/wiki/Data_Transfer_Object
答案 1 :(得分:1)
这个帖子可能有很大帮助:WCF Inheritance and DataContract
答案 2 :(得分:-3)
WCF不是多态的,因为它不是面向对象的。因此,这是不可能的。