Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在SOAP响应中反序列化对象_C#_.net_Web Services_Serialization_Soap - Fatal编程技术网

C# 在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响应。
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
        // ...
    }
}