我有一个类ReportDef
,这是一个具体的类,根据需要使用[DataContract]
和[DataMember]
属性进行了修饰。 ReportDef
与我的A1
,ServiceContract
一起位于程序集IReportService
中。然后,我还有另一个类UiReportDef
,它是从ReportDef
派生的,并且在程序集A2
中。 UiReportDef
没有服务关心的其他状态。
我想使用UiReportDef
实例调用我的服务。有什么方法(除了需要从ReportDef
手动构造一个UiReportDef
实例),而无需让我的服务知道A2
?我知道KnownType
。我不想引用A2
。
编辑:这是一些上下文,可能会使我的问题更容易理解。我的ServiceContract
实现了IReportService
,它定义了一种方法RunReport(ReportDef report)
。 ReportDef
用DataContract
属性修饰,并且 private 成员用DataMember
装饰。 UiReportDef
在依赖于UI相关程序集的程序集中,等等。我没有设计现有的类层次结构。我需要将ReportDefs
和UiReportDefs
(作为ReportDefs
)传递给新服务。由于ReportDef
是具体的,我希望序列化程序在没有任何其他信息的情况下将UiReportDefs
视为ReportDefs
。
最佳答案
我不明白你的问题。
但是我想我现在已经理解了其中的一部分,您想反序列化程序集中没有引用该对象的对象吗?
如果是这样,除非您愿意进行大量反射Reflection 并将其定义/引用为“对象”,否则您将无法这样做
这样做的一种常见方法是尝试在我先前的回答中进行解释,那就是您应该使用可以被客户端/服务器引用的接口。
在这种情况下,通常的做法是创建仅由接口组成的存根程序集。
或者,如对问题的评论所建议的,您可以使用DTO对象。
http://en.wikipedia.org/wiki/Data_Transfer_Object