我在项目(Comp.DataContracts)中有一个数据合同,不需要知道任何其他项目。我有Comp.ProjA引用Comp.DataContracts并有一个派生类,它只是帮助填充数据协定的字段,但与datacontract无关。我想告诉通道使用我的派生类型作为参数进行服务调用,但是将序列化作为基类型。
由于我不希望服务或数据合同项目了解其他项目,我该怎么做?我可以明确地告诉datacontractserializer序列化为基础而不是派生吗?我总是可以转向工厂来填充并返回正确的类型,但希望不这样做。
如何在基类上没有KnownType的情况下执行此操作?想法?
答案 0 :(得分:4)
如果基类型具体,则可以使用IDataContractSurrogate实现来序列化Derived as Base的所有实例。否则,我不认为可以在不更改基类的情况下添加[KnownType]或服务合同来添加[ServiceKnownType]。
答案 1 :(得分:1)
您是否可以通过配置文件添加KnownType
,以便DataContractSerializer能够了解派生类型,而项目之间没有硬依赖关系?这意味着派生类型将是序列化类型。
另一个选项是使用ServiceKnownType属性调用静态方法,并在该方法中使用GetType(typename)
创建已知类型。这也将允许DCS了解派生类型,如果它不是项目或引用项目的一部分,即使基础类型不具体。