Я пытаюсь использовать ответ, который я получаю (успешно) из веб-службы, и использую его для "создания" или "заполнения" списка на стороне 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 или объект для заполнения данных в этом представлении?
Благодарю!
Ваши классы должны быть настроены таким образом, чтобы они соответствовали структуре 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>