将SOAP响应反序列化为c#生成的类

本文关键字:SOAP 响应 反序列化 | 更新日期: 2023-09-27 18:15:09

我们正在与第三方集成,并且在反序列化我们从请求中获得的响应时遇到了麻烦。从fiddler,我可以看到响应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body>
  <ns2:updateItemsResponse xmlns:ns2="http://ThirdParty/dmn/items/1.1">
     <fileId>bd6e7d83-8bfu-4573-fe32-c67c04355dd0</fileId>
     <fileName>12345.MBG_Items.002.2016-10-26-16-23-35.xml</fileName>
  </ns2:updateItemsResponse>

但是我们不能将它反序列化为updateItemsResponse对象。创建了对象,但是fileId和fileName都为空。我们为这个请求和响应生成了类,下面是生成的类:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.MessageContractAttribute(WrapperName = "updateItemsResponse", WrapperNamespace = "http://ThirdParty/dmn/items/1.1", IsWrapped = true)]
public partial class updateItemsResponse
{
    [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://ThirdParty/dmn/items/1.1", Order = 0)]
    public string fileName;
    [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://ThirdParty/dmn/items/1.1", Order = 1)]
    public string fileId;
    public updateItemsResponse()
    {
    }
    public updateItemsResponse(string fileId, string fileName)
    {
        this.fileId= fileId;
        this.fileName= fileName;
    }
}

我们知道web服务是用Java编写的,并且我们在生成类文件时遇到了一些问题——在我们能够使用svcutil.exe创建类文件之前,我们提供的wsdl需要一些工具。所以我认为我需要在生成的文件中做一些调整。

我已经做了一些围绕这个搜索,我猜这里的问题是名称空间,但我不能得到这个工作。我试过更改名称空间,删除名称空间,更改fileId和fileName的顺序-但这些都没有任何区别。

有人能看出我可能遗漏的明显东西吗?快把我逼疯了!

编辑:已经尝试将fileId和fileName更改为XmlElement,但仍然得到空响应。

将SOAP响应反序列化为c#生成的类

找到了!

所以是属性错了-在fileId和fileName上。只需要把它们改成

[System.ServiceModel.MessageBodyMemberAttribute(Name = "fileId", Namespace = "", Order = 0)]
    public string fileId;
    [System.ServiceModel.MessageBodyMemberAttribute(Name = "fileName", Namespace = "", Order = 1)]
    public string fileName;

,我现在可以反序列化响应