mcl*_*dtk 7 .net c# serialization web-services asmx
我有一个.NET Web服务(使用asmx ...还没有升级到WCF)暴露了以下内容:
public class WidgetVersion1 : IWidget {}
public class WidgetVersion2 : IWidget {}
Run Code Online (Sandbox Code Playgroud)
当我尝试绑定到Web服务时,出现以下序列化错误:
无法序列化IWidget类型的成员WidgetVersion1,因为它是一个接口.
我曾尝试添加各种属性的iWidget的接口(XmlIgnore,SoapIgnore,NonSerialized),但它们不是一个接口上都有效.
有谁知道为什么我无法公开界面?我假设WSDL不支持接口,但是.NET不能通过简单地不对接口进行序列化来解决这个问题吗?除了从WidgetVersion1和WidgetVersion2类定义中删除IWidget接口之外,还有什么方法吗?
Aar*_*ght 10
WCF也无法序列化接口; 实际上,通过SOAP序列化接口是不可能的.
原因(简化)是,在反序列化时,.NET必须能够创建一些实际的具体类.界面是一个抽象的概念; 为了让实际的实例存在,它背后总是必须有一个"真正的"类实现.
由于无法构造接口的物理实例,因此也无法序列化.
如果您正在尝试使用它XmlIgnoreAttribute,请了解将其应用于该类型将无法实现任何目标.它需要应用于成员.换一种说法:
public class SerializableClass
{
[XmlElement]
public int ID { get; set; }
[XmlElement]
public string Name { get; set; }
[XmlIgnore]
public IMyInterface Intf { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
...将序列化OK,因为序列化程序不会尝试序列化Intf属性.您只是无法将[XmlIgnore]属性添加到IMyInterface类型定义(它不会编译).
| 归档时间: |
|
| 查看次数: |
3770 次 |
| 最近记录: |