我从xamarin表单中消耗了休息服务。但是我的列表视图没有显示出来。它只显示了很多空行。
[
{
"prodName":"abc",
"qty":142.0,
"price":110.0
},
{
"prodName":"efg",
"qty":20.0,
"price":900.0
}
]
<ListView x:Name="ProductsListView">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding prodName}" TextColor="Black"></Label>
<Label Text="{Binding price}" TextColor="Black"></Label>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
private async void GetProducts()
{
HttpClient client = new HttpClient();
var response = await client.GetStringAsync("http://myUrl/Api/Values");
var products = response;
ProductsListView.ItemsSource = products;
}
答案 0 :(得分:3)
这不是那样的。您现在正在做的是将JSON作为原始字符串值下载并将其放在ListView
中。
您必须将下载的字符串反序列化为.NET对象。
定义这样的模型:
public class ApiModel
{
[JsonProperty("prodName")]
public string prodName { get; set; }
[JsonProperty("qty")]
public long qty { get; set; }
[JsonProperty("price")]
public long price { get; set; }
}
得到你的结果:
private async void GetProducts()
{
HttpClient client = new HttpClient();
var response = await client.GetStringAsync("http://myUrl/Api/Values");
var products = JsonConvert.DeserializeObject<ApiModel[]>(response);
ProductsListView.ItemsSource = products;
}
您的结果JSON字符串现在将转换为ApiModel
的数组,ListView
可以从中读取属性。
如果您还没有这样做,请安装JSON.NET并导入正确的用法(可能using Newtonsoft.Json;
和/或using Newtonsoft.Json.Converters;
)。
您可能希望了解这些内容,有关详细信息,请参阅此处:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/consuming/rest
答案 1 :(得分:2)
问题是你得到了一个json结果,并试图将其推入listView ItemSource。而是使用json.net将您的json转换为产品
<强>鉴于强>
public class Product
{
public string prodName { get; set; }
public double qty { get; set; }
public double price { get; set; }
}
示例强>
private async void GetProducts()
{
HttpClient client = new HttpClient();
var response = await client.GetStringAsync("http://myUrl/Api/Values");
var products = JsonConvert.DeserializeObject<List<Product>>(response);
ProductsListView.ItemsSource = products;
}