c# - Web 服务无法序列化接口(interface)

标签 c# web-services serialization interface

我有这样一个界面:

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/

相关文章:

Spring ws : No adapter for endpoint

c# - 带有 Visual Studio 2008 的 Windows 7 64 位序列化问题

c# - 将一定数量的行从 DataReader 加载到数据表中

c# - ObjectContext 实例已被处置,不能再使用

excel - Google 表格是否具有与 Excel 中的 WEBSERVICE 和 FILTERXML 等效的功能?

c# - Datacontractserializer 不会覆盖所有数据

serialization - 如何在 SBCL/Common Lisp 中序列化和加载对象

c# - 从依赖服务访问 UI

c# - C# 新手,无法创建多维数组

web-services - 使用 commons-httpclient 和 EWSJavaAPI 获取 nullPointerException