¿Cómo puedo deserializar lista XML utilizando Restsharp?
Pregunta
Tengo un xml como esto
<?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; }
}
He encontrado gran producto RestSharp para trabajar con el cliente resto. Quiero usar su deserializer y traté 2 enfoques.
1) Probé
request.RootElement = "item";
var response = Execute<Account>(request);
y sólo pude primer elemento de artículos que es lógico.
2) Cuando intento algo así como
request.RootElement = "xml";
var response = Execute<List<Account>>(request);
Tengo nula.
¿Dónde estoy mal con esto?
Actualizar : La solución está en los comentarios aceptadas respuesta ??p>
Solución
Debería funcionar si cambia el nombre de la clase Account
a Item
y el uso Execute<List<Item>>(request)
. No es necesario especificar un valor RootElement.
Otros consejos
No está seguro de lo que está mal, pero estoy seguro de que John será por pronto para hacerle saber :-) Mientras tanto, ¿por qué no hacerlo de la manera manual de:
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. Mediante la adición de unos pocos métodos de extensión a XElement puede hacer que sea aún más limpio y resistente a elementos / atributos que faltan.