![](/img/trans.png)
[英]Property value doesn't update value to Label in UI in Xamarin Forms
[英]API GET method doesn't store data in the property in Xamarin Forms
数据正在从 API 成功检索,正如我在这里看到的那样,响应然后转到jsonstring ,但从未到达CantGet变量
我需要将它存储在我的财产中,以便我可以使用该值。
这是我的 API 返回:[{"CantPremio":"70"}
然后这是我的财产:
using System;
using System.Collections.Generic;
using System.Text;
namespace ServLottery
{
public class GetCantPremio
{
public long CantPremio { get; set; }
}
}
这是获取任务
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Security.Permissions;
using System.Text;
using System.Threading.Tasks;
namespace ServLottery
{
public class RestClient
{
HttpClient client = new HttpClient();
public async Task<T> Get<T>(string URL)
{
try
{
var response = await client.GetAsync(URL);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
var jsonstring = await response.Content.ReadAsStringAsync();
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(jsonstring);
}
}
catch
{
}
return default(T);
}
}
}
最后是调用:
private async void GetCantDisponible()
{
try
{
RestClient client = new RestClient();
var CantGet = await client.Get<GetCantPremio>("https://servicentroapi.azurewebsites.net/api/GetNumber");
if (CantGet != null)
{
PremiosCantLocal = CantGet.CantPremio.ToString();
}
}
catch (Exception ex)
{
throw ex;
}
}
您正在访问的 api 正在返回一个数组。 所以你必须反序列化的不是一个简单的 object 而是一个列表。
return Newtonsoft.Json.JsonConvert.DeserializeObject<List<T>>(jsonstring);
用这一行替换反序列化的行。 应该解决问题
就像 kelvin 所说,为 json 阵列设置List<T>
。 然后 foreach 集合以获取CantPremio
。
休息客户端:
public class RestClient
{
HttpClient client = new HttpClient();
public async Task<List<T>> Get<T>(string URL)
{
try
{
var response = await client.GetAsync(URL);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
var jsonstring = await response.Content.ReadAsStringAsync();
var s = Newtonsoft.Json.JsonConvert.DeserializeObject<List<T>>(jsonstring);
return s;
}
}
catch
{
}
return default(List<T>);
}
}
GetCantDisponible:
private async void GetCantDisponible()
{
try
{
RestClient client = new RestClient();
var CantGet = await client.Get<GetCantPremio>("https://servicentroapi.azurewebsites.net/api/GetNumber");
if (CantGet != null)
{
foreach (var item in CantGet)
{
var PremiosCantLocal = item.CantPremio.ToString();
}
}
}
catch (Exception ex)
{
throw ex;
}
}
截屏:
如前所述,您的 API 正在返回一个数组,但您正试图将其反序列化为单个实例。 我建议更改客户的呼叫站点以传递类型参数的列表:
List<GetCantPremio> CantGet = await client.Get<List<GetCantPremio>>("https://servicentroapi.azurewebsites.net/api/GetNumber");
请注意, CantGet
现在是一个列表。 如果你只是在寻找一个 object 你可以添加一个FirstOrDefault()
:
GetCantPremio CantGet = await client.Get<List<GetCantPremio>>("https://servicentroapi.azurewebsites.net/api/GetNumber")?.FirstOrDefault();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.