为什么我不能在.NETasmxWeb服务中公开接口?我有一个.NETWeb服务(使用asmx...尚未升级到WCF),它公开了以下内容:publicclassWidgetVersion1:IWidget{}publicclassWidgetVersion2:IWidget{}得到以下序列化错误:无法序列化类型为IWidget的成员WidgetVersion1,因为它是一个接口。我已经尝试将各种属性添加到IWidget接口(XmlIgnore、SoapIgnore、NonSerialized),但它们在接口上不起作用。有谁知道为什么我不能公开接口?我假设WSDL不支持接口,但.NET不能通过简单地不序列化接口来解决这个问题吗?除了从WidgetVersion1和WidgetVersion2类定义中删除IWidget接口之外,还有其他方法吗?WCF也不能序列化接口;事实上,通过SOAP序列化接口是不可能的。原因(简化)是反序列化时,.NET必须能够创建一些实际的具体类。接口是一个抽象概念;为了使实际实例存在,它背后总是必须有一个“真正的”类实现。由于无法构造接口的物理实例,因此也无法对其进行序列化。如果您正在尝试使用XmlIgnoreAttribute,请知道将它应用于该类型不会完成任何事情。它需要应用于成员。换句话说:publicclassSerializableClass{[XmlElement]publicintID{get;放;}[XmlElement]公共字符串名称{get;放;}[XmlIgnore]publicIMyInterfaceIntf{get;放;}}...将序列化OK,因为序列化程序不会尝试序列化Intf属性。您不能将[XmlIgnore]属性添加到IMyInterface类型定义(它不会编译)。创建一个函数AsIWigit()返回一个实现所述接口的私有桥类。这将提供一种根据需要将这些类转换为适当接口的方法,并将与ASMX服务一起工作。因为接口不能序列化。参见Webservicecannotserializeinterface以上是C#学习教程:Whycan'tIexposeaninterfaceina.NETasmxwebservice?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
