GREG_DORIANcod Ответов: 1

Преобразование объекта веб-службы в объект datatable


всем привет

Мне нужно преобразовать каждый элемент результата этого веб-сервиса в dataTable

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://bluxxx.xxxxxxxxs.net/LFA/confirmRcv3.php" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <SOAP-ENV:Body>
      <ns1:ControlreciboResponse>
         <return SOAP-ENC:arrayType="xsd:string[6]" xsi:type="SOAP-ENC:Array">
            <item xsi:type="xsd:string"><![CDATA[<item><TipoDocto>OCN</TipoDocto>
                     <Documento>39147</Documento>
                     <Codigo>17429</Codigo>
                     <Cantidad_Recibida>12</Cantidad_Recibida>
                     <Estatus>Disponible</Estatus></item></item>
            <item xsi:type="xsd:string"><![CDATA[<item><TipoDocto>OCN</TipoDocto>
                     <Documento>39147</Documento>
                     <Codigo>32757</Codigo>
                     <Cantidad_Recibida>13</Cantidad_Recibida>
                     <Estatus>Disponible</Estatus></item></item>
            <item xsi:type="xsd:string"><![CDATA[<item><TipoDocto>OCN</TipoDocto>
                     <Documento>39147</Documento>
                     <Codigo>48156</Codigo>
                     <Cantidad_Recibida>6</Cantidad_Recibida>
                     <Estatus>Disponible</Estatus></item></item>
            <item xsi:type="xsd:string"><![CDATA[<item><TipoDocto>OCN</TipoDocto>
                     <Documento>39147</Documento>
                     <Codigo>52314</Codigo>
                     <Cantidad_Recibida>7</Cantidad_Recibida>
                     <Estatus>Disponible</Estatus></item></item>
            <item xsi:type="xsd:string"><![CDATA[<item><TipoDocto>OCN</TipoDocto>
                     <Documento>39147</Documento>
                     <Codigo>55327</Codigo>
                     <Cantidad_Recibida>10</Cantidad_Recibida>
                     <Estatus>Disponible</Estatus></item></item>
            <item xsi:type="xsd:string"><![CDATA[<item><TipoDocto>OCN</TipoDocto>
                     <Documento>39147</Documento>
                     <Codigo>57813</Codigo>
                     <Cantidad_Recibida>6</Cantidad_Recibida>
                     <Estatus>Disponible</Estatus></item></item>
         </return>
      </ns1:ControlreciboResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Это моя процедура

private void btnLecturaBLur_Click(object sender, EventArgs e)
{
    //get the web service method
     recibodlxService serviceProxy = new recibodlxService();

     object[] sXmlProp = serviceProxy.Controlrecibo();

    //create the datatable
    DataTable dtx;

     //create the datarow
    DataRow dr = dtx.NewRow();
     foreach (object item in sXmlProp)
     {
         //here, HOW Do I do TO add an item to a row
     }

     dtx.Rows.Add(dr);


Или я могу использовать dataTable
dtx.ReadXml(reader)
??

Что я уже пробовал:

Я пытался сделать что-то вроде этого:

PropertyInfo[] Prop = serviceProxy.Controlrecibo().GetType().GetElementType().GetProperties();
  DataTable dt = CreateDataTable(Prop);
  DataRow dr = dt.NewRow();

  foreach (PropertyInfo pi in Prop)
  {
      dr[pi.Name] = pi.GetValue(sXmlProp, null);
  }
  dt.Rows.Add(dr);

ошибка, которая показывает мне, что " объект не совпадает с целевым типом."

1 Ответов

Рейтинг:
9

pepepaco

когда вы добавляете веб-сервис в качестве веб-ссылки, visual studio автоматически генерирует объекты, которые являются "контейнерами" для данных, возвращаемых веб-сервисом. вам не нужно разбирать xml самостоятельно. идентифицируйте эти объекты, вызовите веб-сервис, чтобы заполнить их, они будут представлять собой коллекцию, которую вы повторяете элемент за элементом, как это:

foreach (элемент ControlreciboResponse в коллекции ControlreciboResponseCollection){

Доктор строкаданных = нового объекта datarow()
д-р[0].значение =элемент.TipoDocto;
dr[1]. value =item.Мы;
dr[2]. value =item.Код;
и т.д...
ДТ.Строк.Добавить(д-р);
}

с уважением.