2010-11-02 81 views
9

我有这样如何使用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我想反序列化这个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与其他客户合作。我想使用它的反序列化器,我尝试了两种方法。

1)我试图

request.RootElement = "item";

var response = Execute<Account>(request);

和我只得到第一项元件,其是符合逻辑的。

2)当我尝试像

request.RootElement = "xml";

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

我得到空。

我在哪里错了?

UPDATE:该解决方案是公认的答案评论

回答

8

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

+0

嗯,我得到ErrorMessage =“索引超出了数组的范围。” – nemke 2010-11-02 22:26:57

+0

如果你设置'RootElement =“xml”;'?我认为它没有这个工作,但也许我记错了。 – 2010-11-02 22:36:56

+0

,如果这不起作用,尝试设置RootElement并命名类'项目' – 2010-11-02 22:41:17

6

不知道什么是错的,但我敢肯定,约翰将是很快让你:-)知道在此期间,为什么不这样做手动方式:

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添加一些扩展方法,您可以使其更加清晰和灵活,以适应缺少的元素/属性。

+0

是的,我用linq2xml很好,但我想创建快速开发的客户端API,而不需要手动编码。我需要一个工作垂直向我的同事展示。无论如何,10倍的答案! – nemke 2010-11-02 15:37:59