Как я могу десериализовать список XML с помощью Restsharp? - PullRequest
9 голосов
/ 02 ноября 2010

У меня есть такой xml

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

Я хочу десериализовать этот список xml в объект POCO, который

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

Я нашел отличный продукт RestSharp для работы с отдыхающим клиентом.Я хочу использовать его десериализатор, и я попробовал 2 подхода.

1) Я попытался

request.RootElement = "item";

var response = Execute<Account>(request);

, и я получил толькопервый элемент Item, который является логическим.

2) Когда я пытаюсь что-то вроде

request.RootElement = "xml";

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

Я получаю ноль.

Где я не прав с этим?

ОБНОВЛЕНИЕ : Решение находится в принятых ответных комментариях

Ответы [ 2 ]

8 голосов
/ 02 ноября 2010

Должно работать, если вы переименуете класс Account в Item и используете Execute<List<Item>>(request)Вам не нужно указывать значение RootElement.

6 голосов
/ 02 ноября 2010

Не уверен, что случилось, но я уверен, что Джон скоро сообщит вам :-) А пока почему бы просто не сделать это вручную:

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

Это так чистои легко с XLinq.Добавив несколько методов расширения в XElement, вы можете сделать его еще более чистым и устойчивым к отсутствующим элементам / атрибутам.

...