是否为抽象类的所有派生类型的KnownType?

Joe*_*Joe 12 .net wcf abstract-class known-types

我们有一个抽象类,它是我们通过WCF服务发送的许多不同请求的基础.这是一个丑陋的令人发指的黑客,每当我们添加一个新的请求时,我们必须记住将[KnownType]属性添加到这个基类.

有没有办法告诉将DataContractSerializer这种抽象类型的所有派生对待KnownType

Dan*_* C. 8

我在WCF服务中遇到了同样的问题,并做了以下"不那么令人发指"的黑客来解决已知的类型限制.我只是为了显示备用选项而概述,由您来决定它是否更好.

  1. 在服务启动时,通过反射加载要公开的类型.例如,如果所有暴露于WCF的实体派生自一个公共抽象基础(或更多),则从它们应该所在的程序集中加载所有类型.出于性能原因静态缓存这些类型.

  2. 创建一个返回所述缓存类型的静态方法,具有以下签名: public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider)

  3. 使用以下属性标记WCF接口 [ServiceKnownType("GetKnownTypes", typeof(StaticClassThatCachesTypes))]

这应该给你自动那些或所有类型的暴露从您所选择的基类(ES)细胞,只要未来开发商(S)将它们放置在正确的装配.