在WCF中使用自定义DataContractResolver,以传输涉及泛型的继承树

Ben*_*son 7 .net c# wcf datacontract

我有一个WCF服务,其中有一些操作接受非泛型基类作为参数.

[DataContract]
class Foo
{ ... }
Run Code Online (Sandbox Code Playgroud)

这个基类继续由这样的泛型类继承

[DataContract]
class Bar<T> : Foo
{ ... }
Run Code Online (Sandbox Code Playgroud)

为了实现这一点,我之前必须为Foo类注册KnownTypes,并且这些包括Bar的所有可能变体(例如Bar<string>,Bar<int>甚至Bar<List<string>>).

但是,使用.NET 4中的DataContractResolver,我应该能够构建一个适当存储(和恢复)类的解析器.

我的问题:

  1. DataContractResolvers通常仅用于服务端,而不是客户端吗?如果是这样,在这种情况下如何有用呢?

  2. 我编写一个DataContractResolver是错误的,它会序列化泛型类型的完全限定类型名称,例如Bar`1[List`1[string, mscorlib], mscorlib]?无法在客户端上的相同DataContractResolver恢复这些类型?

Mar*_*ell 1

我希望这能在两端都起作用,但我不确定这是一个好主意;它需要额外的配置,并且不适用于 Silverlight 等。但它可能适用于两端具有相同位的“完整”.NET。