0

我有一个基于 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 实例并执行相关字段的深层复制来解决此问题。有没有更好的办法?

4

1 回答 1

1

由于 XML 序列化程序使用反射来处理对象,因此无法阻止它看到您的基类引用引用了派生类的实例。是的,您必须使用XmlInclude.

OTOH,您是否考虑过使用部分类向原始代理类添加功能?这样,您根本不需要派生类。

于 2010-01-15T03:58:44.407 回答