我正在尝试使用从Web服务接收(成功)的响应,并使用它在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"
}
}
]
}
我从我的CS那里得到了Web服务..
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返回的字符串或对象将数据填充到该视图中?
谢谢!
答案 0 :(得分: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
即可。例如,这将显示“Who”和“What”作为列:
<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>