代码之家  ›  专栏  ›  技术社区  ›  Eric J.

WSE 3.0 Web服务未知的派生类型

  •  0
  • Eric J.  · 技术社区  · 15 年前

    我有一个基于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实例并执行相关字段的深度复制来绕过这个问题。有更好的方法吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   John Saunders Tony    15 年前

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

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