2017-02-08 21 views
0

我使用RestSharp並試圖deserialise節點的集合到一個屬性類:Unserialising在XML元素的集合到一個列表<T>

client.Execute<Foo>(req); 

其中

public class Foo 
{ 
    public List<Bar> Bar{get;set;} 
    ... 
} 
public class Bar 
{ 
    public int Id{get;set;} 
    public string Name{get;set;} 
} 

和xml的迴應是:

<Foo> 
    <Bar><Id>4</Id><Name>asdf4</Name></Bar> 
    <Bar><Id>5</Id><Name>asdf5</Name></Bar> 
    <Bar><Id>6</Id><Name>asdf6</Name></Bar> 
</Foo> 

但是,總是屬性有一個Bar元素與所有字段設置爲空。我已經研究過,所有答案建議使用盡可能少的班級。這是不可能的。爲了將此響應格式化爲列表,我需要做些什麼?我也曾嘗試將DotNet解串器明確地指定爲DotNet解串器,就像從幾年前的一個問題到沒有喜悅一樣。

回答

0

爲了得到你想要的List<Bar>,你只需要改變你的Execute<T>到:

client.Execute<List<Bar>>(req); 

編輯

基於您的評論,Foo具有其他屬性。所以,你的類可以是這個樣子:

public class Foo 
{ 
    public List<Bar> Bar {get;set;} 
    public string OtherProperty { get; set; } 
} 

我想你可能需要改變你的XML,如果可能的話,更是這樣的:

<Foo> 
    <Bars> 
     <Bar><Id>4</Id><Name>asdf4</Name></Bar> 
     <Bar><Id>5</Id><Name>asdf5</Name></Bar> 
     <Bar><Id>6</Id><Name>asdf6</Name></Bar> 
    </Bars> 
    <OtherProp>this</OtherProp> 
</Foo> 

,然後改變你的Foo到:

public List<Bar> Bars {get;set;} 

如果你能夠改變你的XML結構,並改變這個類,你client.Execute<Foo>(req);應該給你你想要的東西。

+0

這是不可能的,因爲'Foo'具有其他屬性。 – user3791372

相關問題