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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top