代码之家  ›  专栏  ›  技术社区  ›  nemke Todd Stout

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

  •  9
  • nemke Todd Stout  · 技术社区  · 14 年前

    我有一个这样的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> 
    

    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 与rest客户端一起工作。我想使用它的反序列化程序,我尝试了两种方法。

    request.RootElement = "item";

    var response = Execute<Account>(request);

    我只得到了第一个符合逻辑的Item元素。

    request.RootElement = "xml";

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

    我没空。

    我错在哪里?

    更新 :解决方案在接受的回答注释中

    2 回复  |  直到 14 年前
        1
  •  8
  •   John Sheehan    14 年前

    如果重命名 Account 分类到 Item Execute<List<Item>>(request) . 不需要指定RootElement值。

        2
  •  6
  •   Darrel Miller    14 年前

    我不知道出了什么事,但我相信约翰很快就会告诉你的:—)与此同时,为什么不直接用手工的方式做呢:

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