2017-02-08 16 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> 

Но всегда свойство имеет один элемент Бар со всеми поля установлены в нуль. Я исследовал и все ответы предложили использовать как можно меньше классов. Здесь это невозможно. Что мне нужно сделать, чтобы отменить этот ответ в списке? Я также попытался указать десериализатор xml явно на десериализатор DotNet в соответствии с вопросом из нескольких лет назад, чтобы не радоваться.

ответ

0

Чтобы получить List<Bar>, что вы хотите, вам просто нужно изменить ваш Execute<T> к:

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

Edit

Основываясь на ваш комментарий, 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

 Смежные вопросы

  • Нет связанных вопросов^_^