Как можно определить список XML, используя RestSharp?
Вопрос
У меня есть 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);
И я получил только первый элемент элемента, который логичен.
2) Когда я пытаюсь что-то вроде
request.RootElement = "xml";
var response = Execute<List<Account>>(request);
Я получил ноль.
Где я ошибаюсь с этим?
ОБНОВИТЬ: Решение в принятом ответе комментарии
Решение
Это должно работать, если вы переименуете Account
класс к Item
и использовать Execute<List<Item>>(request)
. Отказ Вам не нужно указывать веретелевое значение.
Другие советы
Не уверен, что не так, но я уверен, что Джон будет вскоре, чтобы вы узнаете :-) в то же время, почему бы не просто сделать это ручной способ:
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, вы можете сделать его даже уборщиком и устойчивым к отсутствующим элементам / атрибутам.