如何使用Restsharp反序列化Xml列表?

nem*_*mke 9 c# rest 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> 
Run Code Online (Sandbox Code Playgroud)

我想将这个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; } 
} 
Run Code Online (Sandbox Code Playgroud)

我找到了很棒的产品RestSharp与rest客户端一起工作.我想使用它的解串器,我尝试了两种方法.

1)我试过了

request.RootElement = "item";

var response = Execute<Account>(request);

我只有第一个符合逻辑的Item元素.

2)当我尝试类似的东西时

request.RootElement = "xml";

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

我没了.

我错在哪里?

更新:解决方案在接受的答案评论中

Joh*_*han 8

如果您将Account类重命名为Item并使用它,它应该工作Execute<List<Item>>(request).您无需指定RootElement值.

  • 好吧,这就是我做的,无法入睡:)我创建了`public class XmlItems:List <item> {}然后执行<XmlItems>(请求) (5认同)

Dar*_*ler 6

不知道出了什么问题,但我确信John会很快告诉你:-)同时,为什么不用手工方式呢:

    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
                                        };
Run Code Online (Sandbox Code Playgroud)

使用XLinq,它非常简洁.通过向XElement添加一些扩展方法,您可以使其更加清晰,并且能够恢复缺少的元素/属性.