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

ASP.NET MVC调用Web API出现JSON数组无法反序列化为model错误如何解决

报错核心原因

你遇到的Cannot deserialize the current JSON array into type model because the type requires a JSON object to deserialize correctly报错,本质是返回的JSON结构和反序列化目标类型不匹配:

  • Web API接口返回的DataTable序列化后是JSON数组结构,哪怕仅返回1行数据,也会被包裹在[]中,结构示例:[{"ID":"xxx","DateSale":"xxx","From":"xxx","To":"xxx"}]
  • MVC调用端指定的反序列化目标是单个V_WebSearch对象,期望接收不带[]的纯JSON对象结构,自然触发类型匹配失败。

你单独调用Web API能正常获取数据,是因为直接查看原始返回内容没有做强类型校验,到MVC端执行强类型反序列化时才会暴露问题,报错出现在readTask.Wait()行是因为这一步才会实际执行反序列化动作。

解决方案

根据你的业务场景二选一即可:

场景1:存储过程最多返回1条匹配数据

修改Web API的返回逻辑,将DataTable转换为单个v_websearch对象后再返回,避免返回数组结构,示例代码:

public IHttpActionResult GetById (string id)
{
    ConnectionString();
    con.Open();
    SqlCommand com = new SqlCommand("oid_validation", con);
    com.CommandType = CommandType.StoredProcedure;
    com.Parameters.Add(new SqlParameter("@oid", id));
    SqlDataReader dr = com.ExecuteReader();
    DataTable dt = new DataTable();
    dt.Load(dr);
    if(dt.Rows.Count == 0) return NotFound();
    // 手动转换为单条模型对象
    v_websearch result = new v_websearch()
    {
        ID = (System.Guid)dt.Rows[0]["ID"],
        DateSale = (System.DateTime)dt.Rows[0]["DateSale"],
        From = (System.DateTime)dt.Rows[0]["From"],
        To = (System.DateTime)dt.Rows[0]["To"]
    };
    return Ok(result);
}

修改后MVC端原有代码无需调整即可正常反序列化。

场景2:存储过程可能返回多条匹配数据

保持Web API逻辑不变,修改MVC调用端的反序列化目标为集合类型,示例调整代码:

if (result.IsSuccessStatusCode)
{
    // 反序列化目标改为集合类型
    var readTask = result.Content.ReadAsAsync<List<V_WebSearch>>();
    readTask.Wait();
    // 按需取第一条或直接返回集合给视图
    dt = readTask.Result.FirstOrDefault();
    return View(dt);
}
额外注意事项
  • 你定义的模型类中命名空间system首字母需要大写为System,否则会触发编译错误。
  • 异步方法中尽量不要用Wait()/.Result这类阻塞调用,直接用await关键字更稳妥,可以避免线程死锁问题,示例调整:
// 原写法var result = responseTask.Result;
var result = await responseTask;
// 原写法readTask.Wait(); dt = readTask.Result;
dt = await result.Content.ReadAsAsync<V_WebSearch>();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:09:03