派生类型未知WSE 3.0 Web服务
-
20-09-2019 - |
题
我有一个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,你有没有考虑使用部分类将功能添加到原来的代理类?这样一来,你就不会在所有需要一个派生类。
不隶属于 StackOverflow