[英]IRestResponse read a List data
this is first time that I work with SOAP.. I consume a request Rest and I receve a SOAP like this:这是我第一次使用 SOAP .. 我消费了一个请求 Rest 并收到了一个 SOAP ,如下所示:
<SOAP-ENV:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:c1x="http://www.xxxxxxxxx.Request.com" xmlns:chan="http://www.ibm.com/xmlns/prod/CICS/channel-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<C1XAR080OOperationResponse xmlns="http://www.XXXXXXXXX.Response.com" xmlns:cics="http://www.ibm.com/xmlns/prod/CICS/channel-instance" cics:channel="true">
<DHMESSAG xmlns:cics="http://www.ibm.com/xmlns/prod/CICS/channel-instance" cics:structuredContainer="true">
<Context>
<AreaInput>
<ChiaveMessaggio>
<codiceMessaggio>XXXXXXX</codiceMessaggio>
<canale>V</canale>
<versione>01</versione>
</ChiaveMessaggio>
<tipoOperazione>S</tipoOperazione>
</AreaInput>
<AreaOutput>
<esito>C</esito>
<tipoErrore> </tipoErrore>
<tipoRisposta>C</tipoRisposta>
<transidHost>XX</transidHost>
<transazioneController>&SY&</transazioneController>
<cicsDiEsecuzione>XX</cicsDiEsecuzione>
<timeOutHost>60</timeOutHost>
<idHost>XX</idHost>
<messaggioErrore> </messaggioErrore>
<codErrore> </codErrore>
<AreaAbend>
<abendPGM>XX</abendPGM>
<abendStepPgm>X</abendStepPgm>
<abendStepId>XX</abendStepId>
<abendCode> </abendCode>
</AreaAbend>
<taskNumero>XXXXX</taskNumero>
<invPgm>XXXX </invPgm>
</AreaOutput>
<contatoreRiesecuzioni>0</contatoreRiesecuzioni>
<delayStartTransid> </delayStartTransid>
<lungMessaggioApplicativo>0</lungMessaggioApplicativo>
<AreaContainer>
<channelCICS>XXXXXX</channelCICS>
<numeroElementiTabella>04</numeroElementiTabella>
<TabellaContainer>
<RigaContainer>
<nomeContainer>XXXXXX</nomeContainer>
<tipoContainer>X</tipoContainer>
</RigaContainer>
<RigaContainer>
<nomeContainer>XXXXXXX</nomeContainer>
<tipoContainer>I</tipoContainer>
</RigaContainer>
<RigaContainer>
<nomeContainer>XXXXXXX</nomeContainer>
<tipoContainer>O</tipoContainer>
</RigaContainer>
<RigaContainer>
<nomeContainer></nomeContainer>
<tipoContainer></tipoContainer>
</RigaContainer>
<RigaContainer>
<nomeContainer></nomeContainer>
<tipoContainer></tipoContainer>
</RigaContainer>
</TabellaContainer>
</AreaContainer>
</Context>
</DHMESSAG>
<TB00803O xmlns:cics="http://www.ibm.com/xmlns/prod/CICS/channel-instance" cics:structuredContainer="true">
<DatiUo>
<DatiUoReturnCode>
<DatiUoErrType></DatiUoErrType>
<DatiUoCodErr> </DatiUoCodErr>
<DatiUoMessErr> </DatiUoMessErr>
</DatiUoReturnCode>
<DatiOutput>
<maxLiv>1</maxLiv>
<maxOccurs>974</maxOccurs>
<elemTabUo>
<codUo>1234</codUo>
<livello>1</livello>
<indPadre>0</indPadre>
<indFiglioFirst>2</indFiglioFirst>
<indFiglioLast>9</indFiglioLast>
<sportello> </sportello>
<descUo>XXXXXXXXXXXX. </descUo>
<tipoFil>D</tipoFil>
<canaleCiCpRczl>XX</canaleCiCpRczl>
<dataChiusura>01.01.0001</dataChiusura>
<indMail>XXXXXXXXXXXXX </indMail>
</elemTabUo>
<elemTabUo>
<codUo>XXXXXX</codUo>
<livello>2</livello>
<indPadre>1</indPadre>
<indFiglioFirst>10</indFiglioFirst>
<indFiglioLast>110</indFiglioLast>
<sportello> </sportello>
<descUo>XXXXXXXXXXXXXX </descUo>
<tipoFil>A</tipoFil>
<canaleCiCpRczl>XX</canaleCiCpRczl>
<dataChiusura>01.01.0001</dataChiusura>
<indMail>XXXXXXXXXXXXXX </indMail>
</elemTabUo>
</DatiOutput>
</DatiUo>
</TB00803O>
</C1XAR080OperationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
I need to read the list into node TB00803O > DatiUO > DatiOutput > elemTabUo我需要将列表读入节点 TB00803O > DatiUO > DatiOutput > elemTabUo
This is the code for read node elemTabUo but don't work, I get error: Object reference not set to an instance of an object.这是读取节点 elemTabUo 的代码,但不起作用,我收到错误:Object 引用未设置为 object 的实例。
IRestResponse<TB00803O> restResponse2 = client.Execute<TB00803O>((IRestRequest)request);
//maxOccurs work, I get number with children
TextBox1.Text = restResponse2.Data.DatiUo.DatiOutput.maxOccurs;
//If I try to read first children I get error
TextBox1.Text = restResponse2.Data.DatiUo.DatiOutput.elemTabUo[0].codUo;
//I get the same error also I fi try with foreach and I see only FIRST LINE
foreach (var val in restResponse2.Data.DatiUo.DatiOutput.elemTabUo)
{
TextBox1.Text = "---FIRST LINE---\n";
TextBox1.Text = TextBox1.Text + val.codUo;
}
I don't understand why I can't read List elemTabUo, but i can read maxOccurs...我不明白为什么我无法阅读 List elemTabUo,但我可以阅读 maxOccurs...
Thanks for some help感谢您的帮助
I've found a great solution in this link: https://stackoom.com/en/question/4LtIW我在这个链接中找到了一个很好的解决方案: https://stackoom.com/en/question/4LtIW
I've create a class and used xml linq.我创建了一个 class 并使用了 xml linq。
This is a correct code:这是一个正确的代码:
List<XElement> xEvents = doc.Descendants().Where(x => x.Name.LocalName == "elemTabUo").ToList();
ns = xEvents.FirstOrDefault().GetDefaultNamespace();
List<elemTabUo> events = xEvents.Select(x => new elemTabUo()
{
codUo = (string)x.Element(ns + "codUo"),
livello = (string)x.Element(ns + "livello"),
indPadre = (string)x.Element(ns + "indPadre"),
indFiglioLast = (string)x.Element(ns + "indFiglioLast"),
sportello = (string)x.Element(ns + "sportello"),
descUo = (string)x.Element(ns + "descUo"),
tipoFil = (string)x.Element(ns + "tipoFil"),
canaleCiCpRczl = (string)x.Element(ns + "canaleCiCpRczl"),
dataChiusura = (string)x.Element(ns + "dataChiusura"),
indMail = (string)x.Element(ns + "indMail"),
}).ToList();
TextBox1.Text ="Tot: " + events.Count.ToString();
TextBox1.Text = TextBox1.Text + "---INIZIO UO---\n";
int indice = 0;
foreach (var val in events)
{
indice++;
TextBox1.Text =TextBox1.Text + "\n" + indice + " " + val.codUo;
}
public class elemTabUo
{
public string codUo { get; set; }
public string livello { get; set; }
public string indPadre { get; set; }
public string indFiglioFirst { get; set; }
public string indFiglioLast { get; set; }
public string sportello { get; set; }
public string descUo { get; set; }
public string tipoFil { get; set; }
public string canaleCiCpRczl { get; set; }
public string dataChiusura { get; set; }
public string indMail { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.