基于基类的WCF数据合同已知类型

问题描述

我在项目(Comp.DataContracts)中有一个数据合同,不需要了解其他任何项目。我有Comp.ProjA,它引用Comp.DataContracts并具有一个派生类,该类仅有助于填充数据协定的字段,但与datacontract不相关。我想告诉通道使用我的派生类型作为参数进行服务调用,但将其序列化为基本类型。 由于我不希望服务或数据合同项目了解其他项目,我该怎么做?我可以明确地告诉datacontractserializer序列化为基础而不是派生吗?我总是可以找一家工厂来填充并返回正确的类型,但我希望不这样做。 没有基类的KNownType怎么办?有想法吗?     

解决方法

如果基本类型是具体的,则可以使用IDataContractSurrogate实现来序列化“派生为基本”的所有实例。否则,我认为如果不更改基类来添加[KnownType]或服务协定来添加[ServiceKnownType],就无法完成。     ,您是否不能通过配置文件添加“ 0”,以便DataContractSerializer知道派生类型,而在项目之间没有硬性依赖?这将意味着派生类型将是序列化类型。 另一种选择是使用ServiceKnownType属性,该属性调用静态方法,并在该方法中使用
GetType(typename)
创建已知类型。如果DCS不是项目或引用项目的一部分,即使基本类型不是具体的,这也将使DCS知道其派生类型。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...