我有像这样的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; }
}
我找到了与rest客户端合作的优秀产品RestSharp。我想使用它的解串器,我尝试了两种方法。
1)我试过
request.RootElement = "item";
var response = Execute<Account>(request);
我只有第一个符合逻辑的Item元素。
2)当我尝试像
这样的东西时 request.RootElement = "xml";
var response = Execute<List<Account>>(request);
我得到了。
我错在哪里?
更新:解决方案已接受答案评论
答案 0 :(得分:8)
如果您将Account
课程重命名为Item
并使用Execute<List<Item>>(request)
,则该工作正常。您无需指定RootElement值。
答案 1 :(得分: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
};
XLinq非常干净简单。通过向XElement添加一些扩展方法,您可以使其更加清晰,并且能够恢复缺少的元素/属性。