我有一个类ReportDef,这是一个具体的类,根据需要使用[DataContract][DataMember]属性进行了修饰。 ReportDef与我的A1ServiceContract一起位于程序集IReportService中。然后,我还有另一个类UiReportDef,它是从ReportDef派生的,并且在程序集A2中。 UiReportDef没有服务关心的其他状态。

我想使用UiReportDef实例调用我的服务。有什么方法(除了需要从ReportDef手动构造一个UiReportDef实例),而无需让我的服务知道A2?我知道KnownType。我不想引用A2

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

最佳答案

我不明白你的问题。

但是我想我现在已经理解了其中的一部分,您想反序列化程序集中没有引用该对象的对象吗?

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

这样做的一种常见方法是尝试在我先前的回答中进行解释,那就是您应该使用可以被客户端/服务器引用的接口。

在这种情况下,通常的做法是创建仅由接口组成的存根程序集。

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

10-08 18:43