如何使用 c# xamarin 从 API 访问我的 json 数据

How to access my json data from API using c# xamarin

我尝试从 API 点接收数据,但每次收到消息时:

    result  Id = 1, Status = WaitingForActivation, Method = {null}  

这是我的 ResService_HQ_AHS class:

using System;
using System.Diagnostics;
using System.Net.Http;
using System.Threading.Tasks;
using HydroMeteoAnalyzer.Models.API;
using Newtonsoft.Json;

namespace HydroMeteoAnalyzer.Services
{
    public class RestService_HQ_AHS
    {
        HttpClient _client;

        public RestService_HQ_AHS()
        {
            _client = new HttpClient();
        }

        public async Task<HQ_AHS> Get_HQ_AHS(string query)
        {
            HQ_AHS HQ_Data = new HQ_AHS();

            try
            {
                var response = await _client.GetAsync(query);
                if (response.IsSuccessStatusCode)
                {
                    var content = await response.Content.ReadAsStringAsync();
                    HQ_Data = JsonConvert.DeserializeObject<HQ_AHS>(content);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("\t\tERROR {0}", ex.Message);
            }

            return HQ_Data;
        }
    }
}

这是来自 json 的对象:

using System;
namespace HydroMeteoAnalyzer.Models.API
{
    public class HQ_AHS
    {
        public int Station { get; set; }
        public string Ime { get; set; }
    }
}

这是我的常量 class 和 API 端点:

using System;
namespace HydroMeteoAnalyzer.Models.API
{
    public class Constants
    {
        public static string EndPoint = "http://194.141.118.43/api/stations";
    }
}

这是我尝试从 Json 文件接收数据的页面:

    using System;
using System.Collections.Generic;
using HydroMeteoAnalyzer.Models.API;
using HydroMeteoAnalyzer.Services;
using Xamarin.Forms;

namespace HydroMeteoAnalyzer.Models.Hydro
{   
    public partial class HQ_AHS : ContentPage
    {
        RestService_HQ_AHS  _restServiceStations;
        public HQ_AHS ()
        {
            InitializeComponent ();
            _restServiceStations = new RestService_HQ_AHS();
            CheckStation_HQ_AHS();
        }

        string GenerateRequestUriStations(string endpoint)
        {
            string requestUri = endpoint;
            requestUri += $"stations";

            return requestUri;
        }

        public void CheckStation_HQ_AHS()
        {
            var result = _restServiceStations.Get_HQ_AHS(Constants.EndPoint);

            var test = result;
        }
    }
}

每次我在 test 上收到 null 并收到消息:result Id = 1, Status = WaitingForActivation, Method = {null} 并且在 RestService_HQ_AHS 中无法输入 If 语句..

这是API点:http://194.141.118.43/api/stations

我需要更改什么才能从 API 获取数据?

问题是您没有等待 Get_HQ_AHS 的响应。这需要在 CheckStation_HQ_AHS 方法中等待。也将签名更新为 async Task(通常应避免 async void):

public async Task CheckStation_HQ_AHS()
{
    var result = await _restServiceStations.Get_HQ_AHS(Constants.EndPoint);
    ...
}

此外,json 响应是类型 List<HQ_AHS> 的 list/array,因此您应该尝试使用以下方法进行反序列化:

var content = await response.Content.ReadAsStringAsync();
var responseModel = JsonConvert.DeserializeObject<List<HQ_AHS>>(content);
//                       deserialize to list here ^^^

您还没有显示 HQ_Data,所以不确定响应如何映射到那个 class,但是您应该能够使用上面的代码反序列化。