基类上的WCF datacontract knowntype

基类上的WCF datacontract knowntype,wcf,serialization,known-types,Wcf,Serialization,Known Types,我在一个项目中有一个数据契约(Comp.DataContracts),它不需要知道任何其他项目。我有一个Comp.ProjA,它引用Comp.DataContracts,并且有一个派生类,它只帮助填充数据协定的字段,但与datacontract无关。我想告诉通道使用我的派生类型作为参数进行服务调用,但将其序列化为基类型 既然我不想让服务或数据合同项目了解其他项目,我该怎么做?我可以显式地告诉datacontractserializer将序列化为基而不是派生的吗?我总是可以求助于工厂来填充并返回正

我在一个项目中有一个数据契约(Comp.DataContracts),它不需要知道任何其他项目。我有一个Comp.ProjA,它引用Comp.DataContracts,并且有一个派生类,它只帮助填充数据协定的字段,但与datacontract无关。我想告诉通道使用我的派生类型作为参数进行服务调用,但将其序列化为基类型

既然我不想让服务或数据合同项目了解其他项目,我该怎么做?我可以显式地告诉datacontractserializer将序列化为基而不是派生的吗?我总是可以求助于工厂来填充并返回正确的类型,但我不希望这样做


如果基类上没有KnownType,我怎么做?想法

如果基类型是具体的,则可以使用IDataContractSurrogate实现将派生类型的所有实例序列化为基。否则,我认为如果不将基类更改为添加[KnownType],或将服务契约更改为添加[ServiceKnownType],就无法完成此操作。

您不能通过配置文件添加
KnownType
,以便DataContractSerializer知道派生类型,而不会在项目之间存在硬依赖关系吗?这意味着派生类型将是序列化类型


另一个选项是使用ServiceKnownType属性,该属性调用静态方法,并在该方法中使用
GetType(typename)
创建已知类型。如果衍生类型不是项目或引用项目的一部分,即使基础类型不是具体的,这也将允许DCS了解衍生类型。

谢谢。我会记住这一点,但它看起来比一个简单的工厂方法更难实现(对于我当前的需要)。