You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core Web API调用响应值读取错误及修复方案

问题分析与解决方案

你的错误根源是搞反了JSON序列化和反序列化的操作,同时还存在异步代码误用同步阻塞的问题:

  1. 类型不匹配的直接原因:JsonConvert.SerializeObject(schoolResponse)会把已经是JSON字符串的schoolResponse再次序列化为字符串(最终得到带转义的JSON字符串),但你试图把这个字符串赋值给SchoolListResponseModel类型的变量,自然会出现类型转换错误。你需要的是反序列化,把JSON字符串转换成目标类型对象。
  2. 异步代码的问题:使用.Result会阻塞异步线程,应该用await来正确异步等待结果。

修正后的代码

public async Task<SchoolListResponseModel> GetUserSchools(JObject getSchoolsModel)
{
    SchoolListResponseModel schoolListResponseModel = null;
    using (var client = new HttpClient())
    {                
        var response = await client.PostAsJsonAsync(requestUrl, getSchoolsModel);

        if (response.IsSuccessStatusCode)
        {
            // 异步读取响应字符串,避免阻塞线程
            var jsonString = await response.Content.ReadAsStringAsync();
            // 反序列化JSON字符串为目标模型对象
            schoolListResponseModel = JsonConvert.DeserializeObject<SchoolListResponseModel>(jsonString);
        }
        // 可添加非成功状态码的处理逻辑,比如抛出异常或返回默认值
        else
        {
            throw new HttpRequestException($"请求失败,状态码:{response.StatusCode}");
        }
    }
    return schoolListResponseModel;
}

额外优化建议

  • 可以直接使用HttpClient的ReadFromJsonAsync方法简化代码,无需手动处理字符串反序列化:
if (response.IsSuccessStatusCode)
{
    schoolListResponseModel = await response.Content.ReadFromJsonAsync<SchoolListResponseModel>();
}
  • 避免在异步方法中使用.Result或.Wait(),这会导致线程阻塞甚至死锁,始终用await处理异步操作。

内容的提问来源于stack exchange,提问作者Vasanth R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:00:14