C# 在SOAP响应中反序列化对象
我正在尝试反序列化SOAP响应。C# 在SOAP响应中反序列化对象,c#,.net,web-services,serialization,soap,C#,.net,Web Services,Serialization,Soap,我正在尝试反序列化SOAP响应。 soap响应如下所示: <soapenv:Body> <mp0:MP0123_ConnectorRequest_001_Result> <!--You have a CHOICE of the next 2 items at this level--> <mp0:result success="true"> <!--1 or more r
soap响应如下所示:
<soapenv:Body>
<mp0:MP0123_ConnectorRequest_001_Result>
<!--You have a CHOICE of the next 2 items at this level-->
<mp0:result success="true">
<!--1 or more repetitions:-->
<mp0:actionResult type="?" aid="?">
<mp0:success>?</mp0:success>
<!--Optional:-->
<mp0:errorMessage>?</mp0:errorMessage>
<!--Zero or more repetitions:-->
<mp0:dataResult>
<!--1 or more repetitions:-->
<mp0:datafield>
<bas:name>?</bas:name>
<bas:value null="false" encoding="none">?</bas:value>
</mp0:datafield>
</mp0:dataResult>
</mp0:actionResult>
</mp0:result>
<mp0:result-in-file>
<bas:ticket>?</bas:ticket>
<bas:members>
<!--You have a CHOICE of the next 2 items at this level-->
<bas:sequence min="?" max="?"/>
<bas:lables>
<!--1 or more repetitions:-->
<bas:fr-label aid="?">?</bas:fr-label>
</bas:lables>
</bas:members>
</mp0:result-in-file>
</mp0:MP0123_ConnectorRequest_001_Result>
</soapenv:Body>
我知道在这种情况下我不能使用MemoryStream
,所以我在这里搜索了很多并阅读了类似的文章,但我找到的唯一可能的方法是使用路径并使用FileStream
,但我没有响应路径(我想)。那么,有没有反序列化对象的方法
我不知道在序列化/反序列化soap响应时是否遗漏了一些重要的概念,因为这是我第一次处理这个问题
谢谢您应该能够访问以下结果:
var response = connector.ConnectorRequestOp(Request);
if(response != null && response.Item != null)
{
if(response.Item Is MP0123_ConnectorRequest_001_ResultResult)
{
var responseResult = response.Item As MP0123_ConnectorRequest_001_ResultResult;
// ...
}
else
{
var otherResult = response.Item As fileResult
// ...
}
}
您不需要手动反序列化它,只需使用生成的代理类。您的意思是将它转换为类,就这样?只需调用您的方法。他们将返回相应的对象。不,不会。我编辑了代码,正如您所看到的,它返回一个带有属性名项的响应,该属性名项有两个XMLAttribute作为Result,Result在文件中,在这两个属性之间,我需要获得结果。我认为需要反序列化该项以获得结果它有两个属性,具有两种不同的类型,其中一种是
MP0123\u ConnectorRequest\u 001\u ResultResult
,考虑到这一点,我可以这样做吗?
var response = connector.ConnectorRequestOp(Request);
var serializer = new XmlSerializer(typeof(ConnectorRequest_001_ResultResult),"http://schemas.datastream.net/MP_results/MP0123_001");
var responseREsult = (MP0123_ConnectorRequest_001_ResultResult)serializer.Deserialize(new MemoryStream(response.Item));
var response = connector.ConnectorRequestOp(Request);
if(response != null && response.Item != null)
{
if(response.Item Is MP0123_ConnectorRequest_001_ResultResult)
{
var responseResult = response.Item As MP0123_ConnectorRequest_001_ResultResult;
// ...
}
else
{
var otherResult = response.Item As fileResult
// ...
}
}