3

我有一个类,ReportDef,它是一个具体的类,我根据需要使用[DataContract][DataMember]属性进行了装饰。 与我的,一起ReportDef组装。然后我有另一个类,,它派生自并在 assembly 。 没有服务关心的附加状态。 A1ServiceContractIReportServiceUiReportDefReportDefA2UiReportDef

我想用UiReportDef. 有没有办法(除了手动构造一个ReportDef实例UiReportDef)在我的服务不知道的情况下做到这一点A2?我知道KnownType。我不想参考A2


编辑:这里有一些上下文可能会让我的问题更容易理解。我的ServiceContract工具IReportService定义了一个方法,RunReport(ReportDef report). ReportDefDataContract属性装饰,并且有用 . 装饰的私有成员DataMemberUiReportDef是在依赖于UI相关程序集等的程序集中。我没有设计现有的类层次结构。我需要将ReportDefsand UiReportDefs(as ReportDefs) 传递给新服务。由于ReportDef是具体的,我希望序列化程序UiReportDefsReportDefs没有任何其他信息的情况下处理。

4

3 回答 3

2

我没听懂你的问题。

但我想我现在理解了一部分,你想反序列化一个没有引用它的程序集中的对象吗?

如果是这样,除非您愿意进行大量反思并将其定义/引用为“对象”,否则您不能这样做

执行此操作并试图在我之前的回答中解释的常用方法是您应该使用客户端/服务器都可以引用的接口。

在这种情况下,通常的做法是创建只包含接口的存根程序集。

或者正如您对问题的评论所暗示的那样,您可以使用 DTO 对象。 http://en.wikipedia.org/wiki/Data_Transfer_Object

于 2009-05-05T09:40:47.093 回答
1

这个线程可能有很大帮助:WCF Inheritance and DataContract

于 2009-09-08T15:14:58.327 回答
-3

WCF 不是多态的,因为它不是面向对象的。因此这是不可能的。

于 2009-05-05T09:35:03.317 回答