2010-11-02 8 views
9

Mam xml jak tenJak można deserializować listę Xml za pomocą Restsharp?

<?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> 

Chcę deserializowania tej listy XML do obiektu POCO który

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

znalazłem świetny produkt RestSharp do pracy z klientem spoczynkowej. Chcę użyć jego deserializera i spróbowałem 2 podejść.

1) Próbowałem

request.RootElement = "item";

var response = Execute<Account>(request);

i dostałem tylko pierwszy element produkt, który jest logiczny.

2) Kiedy próbuję coś podobnego

request.RootElement = "xml";

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

dostałem zerowa.

Gdzie się mylę?

UPDATE: Rozwiązanie jest w akceptowanej odpowiedzi komentuje

Odpowiedz

8

Powinien działać, jeśli zmienisz nazwę klasy Account na Item i użyjesz Execute<List<Item>>(request). Nie trzeba podawać wartości RootElement.

+0

Hmm, mam ErrorMessage = "Indeks był poza granicami tablicy." – nemke

+0

Czy to działa, jeśli ustawisz "RootElement =" xml ";'? Myślałem, że to działa bez tego, ale może pamiętam niepoprawnie. –

+0

a jeśli to nie zadziała, spróbuj ustawić RootElement i nazwać klasę "item" –

6

Nie wiem, co się stało, ale jestem pewien, że John będzie za wcześnie, aby poinformować :-) W międzyczasie, dlaczego nie po prostu to zrobić instrukcja obsługi:

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

To takie proste i łatwe dzięki XLinq. Dodając kilka metod rozszerzenia do XElement, możesz uczynić go jeszcze czystszym i odporniejszym na brakujące elementy/atrybuty.

+0

Tak, mam problemy z linq2xml, ale chciałem stworzyć api klienta do szybkiego tworzenia, bez potrzeby ręcznego kodowania. Potrzebuję pionu roboczego, aby pokazać moim kolegom. 10x za odpowiedź! – nemke

Powiązane problemy