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

POST提交的JSON对象在Web API中无法识别为object类型的求助

问题原因

报错的核心原因是JObject类型本身实现了IEnumerable<KeyValuePair<string, JToken>>接口,Dapper做参数校验时会优先检测传入对象是否为可枚举类型,误以为你要传入批量参数序列,直接触发了禁止逻辑,和参数内容本身无关。

最优解决方案

不用手动序列化参数、也不用dynamic类型接收,直接用字典类型对接前端传参,Dapper原生支持字典作为查询参数:

  1. 修改Web API接口签名,用Dictionary<string, object>替代dynamic接收参数:
public async Task<IHttpActionResult> MyFunction([FromBody]Dictionary<string, object> whereCond)
  1. Angular端直接传原生JS对象即可,不需要包裹、也不需要手动JSON序列化:
this.migController.MigrationGetMigrationReports({NotMigrated: true, MissingTargetFiles: 0})
  1. 调用Dapper方法时直接传入字典即可,效果和传入匿名对象完全一致:
var result = connection.GetList<T>(whereCond);

兼容方案(需保留dynamic参数时)

如果业务逻辑要求必须用dynamic接收参数,可以手动将JObject转换为Dapper的DynamicParameters对象再传入:

string obj = whereCond.whereCond;
dynamic pObj = JObject.Parse(obj);
var parameters = new DynamicParameters();
foreach (var prop in pObj)
{
    parameters.Add(prop.Key, prop.Value.Value<object>());
}
var result = connection.GetList<T>(parameters);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:18:03