从Xamarin应用程序消费休息服务

时间:2018-04-24 08:45:00

标签: c# xaml xamarin xamarin.forms

我从xamarin表单中消耗了休息服务。但是我的列表视图没有显示出来。它只显示了很多空行。

休息服务响应

[
   {
      "prodName":"abc",
      "qty":142.0,
      "price":110.0
   },
   {
      "prodName":"efg",
      "qty":20.0,
      "price":900.0
   }
]

我的.xaml文件

<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>

xaml.cs文件

private async void GetProducts()
{
    HttpClient client = new HttpClient();

    var response = await client.GetStringAsync("http://myUrl/Api/Values");
    var products = response;
    ProductsListView.ItemsSource = products;
}

2 个答案:

答案 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;
}