Comment puis-je désérialiser liste Xml en utilisant Restsharp?
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
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.