我有这样一个界面:
public interface IDocument : ISerializable
{
Boolean HasBeenUploaded { get; set; }
void ISerializable.GetObjectData(SerializationInfo, StreamingContext) { }
}
从这里继承了三个文档,所有这些都序列化得很好。但是当创建一个简单的网络服务时,它什么都不做,它们可以上传到...
public class DCService : System.Web.Services.WebService
{
[WebMethod]
public Boolean ReceiveDocument(IDocument document)
{
DBIO io = new DBIO();
return io.InsertIntoDB(document); // does nothing; just returns true
}
}
我在尝试运行它时得到这个:“无法序列化接口(interface) IDocument”
我不太确定为什么这会成为一个问题。我知道some people遇到了麻烦,因为他们不想强制子类实现自定义序列化,但我这样做了,到目前为止它已经成功了。
edit> 如果我创建单独的 web 方法来接受实现接口(interface)的对象,它工作正常,但这会削弱客户端/服务器之间的契约(并且首先破坏了拥有接口(interface)的目的)
最佳答案
您可能需要对 Web 方法使用 XmlInclude 属性。可以找到一个例子here .我们之前遇到过这个问题,并已将 XmlInclude 属性添加到客户端的 Web 服务代理类和某些 Web 服务方法中。
[WebMethod]
[XmlInclude(typeof(MyDocument))]
public Boolean ReceiveDocument(IDocument document)
{
DBIO io = new DBIO();
return io.InsertIntoDB(document); // does nothing; just returns true
}
关于c# - Web 服务无法序列化接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/659039/