【问题标题】:Fetching JSON in C# Xamarin Forms [closed]在 C# Xamarin 表单中获取 JSON [关闭]
【发布时间】:2016-06-04 12:35:30
【问题描述】:

我正在尝试在 Xamarin Forms (C#) 中使用我的 JSON API。 API 可以返回:

失败时:{"status":"failed"}

一切正常时:{"status":"success","time":"03.06.2016 13:15","data":["Thats a cool text","And thats another text"]}

我目前正在这样做:

var client = new HttpClient ();
var url = "http://domain/plan/web/get/" + userclass;

var response = await client.GetAsync (url);
var data = response.Content.ReadAsStringAsync ().Result;

但是现在,我需要:

  • 将 JSON 数据提取到数组或其他东西中
  • API 返回失败时显示警报(使用 DisplayAlert())
  • 当 API 返回成功时,获取时间,并将数据(API 结果末尾的两个或多个字符串)设置为标签或列表视图。

我该怎么做?

【问题讨论】:

  • 创建一个处理 JSON 数据的类。使用 Newtonsoft.json Nuget 包将 json 转换为对象。
  • 但是像两个字符串这样的数据怎么获取,因为它就像JSON中的一个数组。
  • 创建一个模型来处理你的数据,然后你使用JsonConvert.Serialize(yourobject)将它变成一个字符串,当你获取它时你反序列化你的字符串来取回你的对象JsonConvert.Deserialize<yourobject>(jsonstring);

标签: c# json xamarin xamarin.forms fetch


【解决方案1】:

您需要做的第一步是创建一个可以处理您的 JSON 数据的类。在这种情况下,我会这样做:

public class APIResponse
{
    public string status { get; set; }
    public string time { get; set; }
    public List<string> data { get; set; }
}

然后你需要创建你需要创建一个方法来发出 GET 请求。这可以通过这样做来完成:

    public async Task <APIResponse> GetDataFromAPI(string query){
                try
                {
                    var client = new System.Net.Http.HttpClient ();
                    client.BaseAddress = "http://domain/";
                var response = await client.GetAsync("plan/web/get"+query);

                response.EnsureSuccessStatusCode();
                var responseJSON = await response.Content.ReadAsStringAsync();

                var msg  = JsonConvert.DeserializeObject<APIResponse>(responseJSON);

                return msg;
            }

            catch (Exception exc)
            {
                var msg = new APIResponse ();
                msg.status = "failed";

                return msg;
            }

}

然后在您的页面中调用该方法:

APIResponse data = await GetDataFromAPI("yourquery");
if(data.status.Equals("success"){
     //Assign object values to label text property
}
else {
     DisplayAlert("Error","Something wrong happened", "OK");
}

【讨论】:

  • 奇怪的事情在这里,我有相同的代码,除了我在APIResponse data = await GetDataFromAPI("yourquery"); 上得到一个错误,它给出了The name 'GetDataFromAPI' does not exist in the current context. 任何想法?
猜你喜欢
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 2021-11-01
  • 2012-04-11
  • 2019-03-06
  • 1970-01-01
相关资源
最近更新 更多