Come faccio a deserializzare elenco XML utilizzando Restsharp?
Domanda
Ho un XML come questo
<?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 la sua 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 come
request.RootElement = "xml";
var response = Execute<List<Account>>(request);
ho ottenuto nulla.
Dove mi trovo sbagliato in questo?
Aggiorna : La soluzione è nei commenti risposta accettato
Soluzione
Dovrebbe funzionare se si rinomina la classe Account
per Item
e l'uso Execute<List<Item>>(request)
. Non è necessario specificare un valore RootElement.
Altri suggerimenti
Non so cosa c'è che non va, ma sono sicuro che John sarà da presto per farvi sapere :-) Nel frattempo, perché non solo farlo nel modo manuale:
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
};
E 'così pulito e facile con XLinq. Con l'aggiunta di un paio di metodi di estensione per XElement si può rendere ancora più pulito e resistente al mancanti elementi / attributi.