问题描述
我在项目(Comp.DataContracts)中有一个数据合同,不需要了解其他任何项目。我有Comp.ProjA,它引用Comp.DataContracts并具有一个派生类,该类仅有助于填充数据协定的字段,但与datacontract不相关。我想告诉通道使用我的派生类型作为参数进行服务调用,但将其序列化为基本类型。
由于我不希望服务或数据合同项目了解其他项目,我该怎么做?我可以明确地告诉datacontractserializer序列化为基础而不是派生吗?我总是可以找一家工厂来填充并返回正确的类型,但我希望不这样做。
没有基类的KNownType怎么办?有想法吗?
解决方法
如果基本类型是具体的,则可以使用IDataContractSurrogate实现来序列化“派生为基本”的所有实例。否则,我认为如果不更改基类来添加[KnownType]或服务协定来添加[ServiceKnownType],就无法完成。
,您是否不能通过配置文件添加“ 0”,以便DataContractSerializer知道派生类型,而在项目之间没有硬性依赖?这将意味着派生类型将是序列化类型。
另一种选择是使用ServiceKnownType属性,该属性调用静态方法,并在该方法中使用
GetType(typename)
创建已知类型。如果DCS不是项目或引用项目的一部分,即使基本类型不是具体的,这也将使DCS知道其派生类型。