Question

J'ai un xml comme ceci

<?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> 

Je veux désérialiser cette liste xml pour objet POCO qui est

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

J'ai trouvé excellent produit RestSharp pour travailler avec le client reste. Je veux utiliser son désérialiseur et j'ai essayé 2 approches.

1) J'ai essayé

request.RootElement = "item";

var response = Execute<Account>(request);

et je ne suis premier élément d'objet qui est logique.

2) Lorsque je tente quelque chose comme

request.RootElement = "xml";

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

Je suis nulle.

Où suis-je pas avec cela?

UPDATE : La solution est dans les commentaires de réponse acceptée

Était-ce utile?

La solution

Il devrait fonctionner si vous renommez la classe Account à Item et l'utilisation Execute<List<Item>>(request). Vous n'avez pas besoin de spécifier une valeur de RootElement.

Autres conseils

Je ne sais pas ce qui ne va pas, mais je suis sûr que John sera bientôt par vous faire savoir :-) En attendant, pourquoi ne pas simplement la façon manuelle:

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

Il est si propre et facile avec XLinq. En ajoutant quelques méthodes d'extension à XElement vous pouvez le rendre encore plus propre et résistant aux éléments / attributs manquants.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top