我有一个WSE 3.0基于web的服务,和一个WinForms客户端应用程序,使得使用在该服务的References.cs中定义的类型,但它们的子类,以提供由客户端所需的一些附加功能。

然而,当我通过子类的实例返回给Web服务,即使我明确地转换回原来的类型,我得到了可怕的:

使用XmlInclude或SoapInclude属性来指定不是静态已知类型。

在参考到我的派生类型。

代码摘要:

public class DefinedInReferenceCs
{ 
    // ... 
}

public class ClientSubclass : DefinedInReferenceCs
{
    // My extra stuff
}

public class MyClient
{
    public CallTheWebService(ClientSubclass  obj)
    {
        // obj is an instance of ClientSubclass,  cast as DefinedInReferenceCs
        svc.MyMethod((DefinedInReferenceCs)obj); 
        // Throws an exception complaining that ClientSubclass is not statically known
    }
}

我可以明确地创建一个DefinedInReferenceCs实例,并进行相关领域的深层副本解决这个问题。有没有更好的办法?

有帮助吗?

解决方案

由于串行使用反射的XML与对象的工作,有没有办法阻止它看到你的基类引用引用您的派生类的一个实例。是的,你必须使用XmlInclude

OTOH,你有没有考虑使用部分类将功能添加到原来的代理类?这样一来,你就不会在所有需要一个派生类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top