【问题标题】:Read / Load JSON response from PHP Web API to WPF ComboBox从 PHP Web API 读取/加载 JSON 响应到 WPF ComboBox
【发布时间】:2021-04-11 01:35:46
【问题描述】:

以下是我从 PHP Web API 获得的 JSON 响应。在检查“成功”为真/假后,我需要将此“tradeType”加载到 WPF ComboBox 中,如果为假,则显示“消息”中显示的错误消息

{
    "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);    
}

【问题讨论】:

  • 您对上述代码的哪一部分有疑问?它编译吗?您是否遇到异常或发生了什么?

标签: c# json wpf webapi


【解决方案1】:
var jsonString = response.Content.ReadAsStringAsync(); 

您在此处缺少await,因此调用已触发但未等待。在 var 中也有 Task 而不是 string

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

或使用非异步版本。

【讨论】:

    【解决方案2】:
    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);
        }
    }
    

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。
    猜你喜欢
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多