如何使用 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,但是您应该能够使用上面的代码反序列化。
我尝试从 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,但是您应该能够使用上面的代码反序列化。