从 PHP Web API 读取/加载 JSON 响应到 WPF ComboBox

Read / Load JSON response from PHP Web API to WPF ComboBox

以下是我的 JSON 来自 PHP Web API 的回复。我需要在检查“成功”后将此“tradeType”加载到 WPF ComboBox 中 true/false,如果错误显示“消息”中显示的错误消息

{
    "success":"true",
    "message":"Trade Type List",
    "tradeType":[
        {"id":1, "name":"Coaching Class"},
        {"id":2,"name":"Food Supply"},
        {"id":3,"name":"Marriage Bureau"}
    ]
}

我是 WPF 和 Web 的新手API,我尝试过的是

HttpClient client = new HttpClient();    
client.BaseAddress = new Uri("http://offline.localhost.in/");    
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));    
 HttpResponseMessage response = client.GetAsync("api/utilities/trade_types").Result;    
if (response.IsSuccessStatusCode)    
{    
    var jsonString = response.Content.ReadAsStringAsync();    
    Root myDeserializedClass = JsonConvert.DeserializeObject<List<TradeType>>(jsonString);                   
    cmbTrade.ItemsSource = users;    
}    
else    
{    
    MessageBox.Show("Error Code" + response.StatusCode + " : Message - " + response.ReasonPhrase);    
}
var jsonString = response.Content.ReadAsStringAsync(); 

您在这里缺少一个 await,因此呼叫已触发但未等待。在 var 中也有 Task 而不是 string.

var jsonString = await response.Content.ReadAsStringAsync(); 

或使用非异步版本。

public class TradeType
{
    public int id { get; set; }
    public string name { get; set; }
}

public class Root
{
    public string success { get; set; }
    public string message { get; set; }
    public List<TradeType> tradeType { get; set; }
}

private void GetData()
{
    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://offline.localhost.in/");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    HttpResponseMessage response = client.GetAsync("api/utilities/trade_types").Result;
    if (response.IsSuccessStatusCode)
    {
        var result = response.Content.ReadAsStringAsync().Result;
        Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(result);
        myDeserializedClass.tradeType.Insert(0, new TradeType { id = 0, name = "-Select-" });
        cmbTrade.ItemsSource = myDeserializedClass.tradeType;
        cmbTrade.DisplayMemberPath = "name";
        cmbTrade.SelectedValuePath = "id";
        cmbTrade.SelectedIndex = 0;
    }
    else
    {
        MessageBox.Show("Error Code" + response.StatusCode + " : Message - " + response.ReasonPhrase);
    }
}