2010-11-02 22 views
9

que tienen un xml como esto¿Cómo puedo deserializar la lista Xml usando Restsharp?

<?xml version="1.0" encoding="utf-8"?> 
    <xml> 
      <item> 
        <accountid>1</accountid> 
        <accounttypeid>1</accounttypeid> 
        <accounttypename/> 
        <accountbankid>1</accountbankid> 
        <accountbankname/> 
        <accountsaldo>0</accountsaldo> 
      </item> 
      <item> 
        <accountid>2</accountid> 
        <accounttypeid>1</accounttypeid> 
        <accounttypename/> 
        <accountbankid>2</accountbankid> 
        <accountbankname/> 
        <accountsaldo>0</accountsaldo> 
      </item> 
      ... 
    </xml> 

Quiero deserializar esta lista XML a objetos POCO que es

public class Account 
{ 
     public string AccountId { get; set; } 
     public string AccountTypeId { get; set; } 
     public string AccountTypeName { get; set; } 
     public string AccountBankId { get; set; } 
     public string AccountBankName { get; set; } 
     public string AccountSaldo { get; set; } 
} 

encontré gran producto RestSharp para trabajar con el cliente resto. Quiero usar su deserializador y probé 2 enfoques.

1) Me trataron

request.RootElement = "item";

var response = Execute<Account>(request);

y sólo tiene primer elemento del artículo que es lógico.

2) Cuando intento algo así como

request.RootElement = "xml";

var response = Execute<List<Account>>(request);

llegué nula.

¿Dónde me equivoco con esto?

ACTUALIZACIÓN: La solución está en respuesta aceptada comenta

Respuesta

8

Debería funcionar si cambia el nombre de la clase Account a Item y usa Execute<List<Item>>(request). No necesita especificar un valor de RootElement.

+0

Hmm, recibí ErrorMessage = "El índice estaba fuera de los límites de la matriz". – nemke

+0

¿Funciona si configura 'RootElement =" xml ";'? Pensé que funcionó sin eso, pero tal vez estoy recordando incorrectamente. –

+0

y si eso no funciona, intente configurar RootElement y nombrar la clase 'item' –

6
No

seguro de lo que está mal, pero estoy seguro de que John será por pronto para hacerle saber :-) Mientras tanto, ¿por qué no hacerlo la forma manual:

var root = XElement.Parse(xmlString); 
    var accounts = from it in root.Element("xml").Elements("item") 
        select new Account() { 
              AccountId = it.Element("accountid").Value, 
              AccountTypeId = it.Element("accounttypeid").Value, 
              AccountTypeName = it.Element("accounttypename").Value, 
              AccountBankId = it.Element("banktypeid").Value, 
              AccountBankName = it.Element("banktypename").Value, 
              AccountSaldo = it.Element("accountsaldo").Value 
             }; 

Es tan limpio y fácil con XLinq. Al agregar algunos métodos de extensión a XElement, puede hacerlo aún más limpio y resistente a los elementos/atributos que faltan.

+0

Sí, estoy de acuerdo con linq2xml pero quería crear una API de cliente para un desarrollo rápido, sin la necesidad de una codificación manual. Necesito una vertical de trabajo para mostrar a mis colegas. 10 veces la respuesta de todos modos! – nemke

Cuestiones relacionadas