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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top