Используйте Response от Webservice для создания списка xaml

1

Я пытаюсь использовать ответ, который я получаю (успешно) из веб-службы, и использую его для "создания" или "заполнения" списка на стороне xaml...

Здесь json

{  
   "success":true,
   "code":200,
   "rows":[  
      {  
         "Purchase":{  
            "id":"1"
         },
         "Who":{  
            "id":"1",
            "value":"NA"
         },
         "What":{  
            "id":"1",
            "value":"what-text"
         }
      },
      {  
         "Purchase":{  
            "id":"2"
         },
         "Who":{  
            "id":"2",
            "value":"ME"
         },
         "What":{  
            "id":"1",
            "value":"what-text"
         }
      }
   ]
}

И я получаю Webservice от своих CS, как это.

HttpWebRequest hwr = rez.AsyncState as HttpWebRequest;
HttpWebResponse response = hwr.EndGetResponse(rez) as HttpWebResponse;
string jsonResponseString = (new StreamReader(response.GetResponseStream(), Encoding.UTF8)).ReadToEnd();

Dispatcher.BeginInvoke(() =>
{
    var responseObject =
        Newtonsoft.Json.JsonConvert.DeserializeObject(jsonResponseString);
});

Что работает. "jsonResponseString" возвращается с приведенным выше json.

Теперь я хотел бы показать эти результаты на моей странице xaml. Здесь у меня уже есть вопрос, что лучше всего использовать.. LongListSelector? или должна работать таблица?

В моей CS у меня также есть настройка:

public class Purchase
{
    public List<string> Who { get; set; }
    public List<string> What { get; set; }
}

public class RootObject
{
    public List<Purchase> purchase { get; set; }
    public int success { get; set; }
    public string message { get; set; }
} 

Я нашел где-то я мог использовать их, но это может быть не нужно.

Хорошо, так или иначе, поэтому я хотел бы выяснить, что лучше всего использовать в моем представлении xaml, и как я использую возвращаемую строку json или объект для заполнения данных в этом представлении?

Благодарю!

Теги:
xaml
windows-phone-8

1 ответ

3
Лучший ответ

Ваши классы должны быть настроены таким образом, чтобы они соответствовали структуре JSON:

public class Item
{ 
    public int id { get; set; }
    public string value { get; set; }
}

public class Row
{
    public Item Purchase { get; set; }
    public Item Who { get; set; }
    public Item What { get; set; }
}

public class RootObject
{
    public List<Row> rows { get; set; }
    public bool success { get; set; }
    public int code { get; set; }
} 

Затем вы можете десериализовать свой типичный "RootObject":

RootObject responseObject = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(jsonResponseString);

Что касается презентации, вы можете использовать любое количество элементов управления:

  • ListBox позволяет выбирать пользователя
  • LongListSelector похож на ListBox, но хорош для коллекций большого числа
  • ItemsControl полезен, если вы хотите просто отобразить коллекцию

Скажем, вы идете с ListBox - тогда это просто вопрос установки его ItemsSource равным "responseObject.rows", указав ItemTemplate. Например, на экране будут отображаться столбцы "Кто" и "Что":

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="{Binding Who.value}" />
                <TextBlock Grid.Column="1" Text="{Binding What.value}" />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalAlignment" Value="Stretch" />
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>
  • 0
    Спасибо за ответ и объяснение, я собираюсь поработать над этим и сообщить вам, что происходит. Еще раз спасибо!
  • 0
    Работал как шарм! Спасибо мистер МакГарнагл!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню