2010-11-02 12 views
9

Ho un XML come questoCome posso deserializzare l'elenco 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> 

voglio deserializzare questa lista XML per oggetto POCO che è

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; } 
} 

Ho trovato grande prodotto RestSharp per lavorare con il cliente riposo. Voglio usare il suo deserializzatore e ho provato 2 approcci.

1) ho cercato

request.RootElement = "item";

var response = Execute<Account>(request);

e ho ottenuto solo primo elemento del lotto, che è logico.

2) Quando cerco qualcosa di simile

request.RootElement = "xml";

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

ho ottenuto nulla.

Dove mi sbaglio?

UPDATE: La soluzione è nella risposta accettata commenta

risposta

8

Dovrebbe funzionare se si rinomina la classe Account in Item e si utilizza Execute<List<Item>>(request). Non è necessario specificare un valore RootElement.

+0

Hmm, ho ottenuto ErrorMessage = "L'indice era fuori dai limiti dell'array." – nemke

+0

Funziona se si imposta 'RootElement =" xml ";'? Pensavo che funzionasse senza quello, ma forse sto ricordando in modo errato. –

+0

e se ciò non funziona, prova a impostare RootElement e a nominare la classe 'item' –

6
Non

sicuro di ciò che è sbagliato, ma sono sicuro che John sarà da poco per farvi sapere :-) Nel frattempo, perché non solo farlo the manual way:

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 
             }; 

È così pulito e facile con XLinq. Aggiungendo alcuni metodi di estensione a XElement è possibile renderlo ancora più pulito e resiliente agli elementi/attributi mancanti.

+0

Sì, sto bene con linq2xml ma volevo creare API client per lo sviluppo rapido, senza la necessità di codifica manuale. Ho bisogno di un verticale funzionante da mostrare ai miei colleghi. 10 volte per la risposta comunque! – nemke

Problemi correlati