使用不同程序集中的子类在WCF上序列化抽象类

时间:2013-08-28 10:56:51

标签: .net wcf abstract-class

我们正在使用C#和.NET 4来构建支持WCF的应用程序。我们有一个“父”程序集实现:

[DataContract]
public abstract class A
{
  //...
}

然后,其他“子”程序集实现A的子类,如下所示:

[DataContract]
public class B : A
{
  //...
}

在另一个程序集中,我们有一些方法正在尝试封装为WCF服务。其中一些方法的返回类型为A

显然,子程序集需要包含对父程序集的引用,以便派生类继承自类A。当WCF似乎要求我们向类KnownType添加A属性以列出其所有潜在的子类时,就会出现问题;这将需要A所在的父程序集对子程序集的引用,这将创建循环依赖项。

还有其他方法吗? WCF真的需要知道被用作返回类型的抽象类的所有潜在具体类的类型吗?谢谢。

修改即可。正如一些评论所建议的那样,我们尝试了基于KnownTypeAttribute.MethodName的方法。这将允许我们动态加载子类所在的程序集,并根据需要将子类返回给WCF。当类A用作返回类型时它可以工作,但当它用作方法参数时它不起作用;我们一直在获得“未预期的类型”WCF错误。我们会继续尝试方法。

1 个答案:

答案 0 :(得分:0)

您可以在构建Serializer时设置已知类型,这可能会解决此问题

http://msdn.microsoft.com/en-us/library/aa344259.aspx