我有一个基于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实例并执行相关字段的深层副本来解决这个问题。还有更好的方法吗?
答案 0 :(得分:1)
由于XML Serializer使用Reflection来处理对象,因此无法阻止它看到基类引用引用派生类的实例。是的,您必须使用XmlInclude
。
OTOH,您是否考虑过使用部分类来为原始代理类添加功能?这样,您根本不需要派生类。