2010-11-02 86 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