将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,但仍然得到空响应。
找到了!
所以是属性错了-在fileId和fileName上。只需要把它们改成
[System.ServiceModel.MessageBodyMemberAttribute(Name = "fileId", Namespace = "", Order = 0)]
public string fileId;
[System.ServiceModel.MessageBodyMemberAttribute(Name = "fileName", Namespace = "", Order = 1)]
public string fileName;
,我现在可以反序列化响应