9

私はこのような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; } 
} 

レストクライアントを操作するための優れた製品RestSharpを見つけました。そのデシリアライザーを使用したいので、2つのアプローチを試しました。

1)試してみました

request.RootElement = "item";

var response = Execute<Account>(request);

論理的な最初のItem要素のみを取得しました。

2)私が次のようなことをしようとすると

request.RootElement = "xml";

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

私はnullになりました。

これはどこが間違っているのですか?

更新:解決策は受け入れられた回答コメントにあります

4

2 に答える 2

8

Accountクラスの名前を に変更しItemて使用すると機能するはずですExecute<List<Item>>(request)。RootElement 値を指定する必要はありません。

于 2010-11-02T20:58:33.563 に答える
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 にいくつかの拡張メソッドを追加することで、不足している要素/属性に対してよりクリーンで回復力のあるものにすることができます。

于 2010-11-02T14:19:26.597 に答える