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

MVC WebApi中JsonObject反序列化空对象及模型绑定失效问题咨询

解决Web API接收JSON反序列化空对象及模型绑定失效问题

我来帮你搞定这个问题!你现在遇到的情况是用jQuery发送JSON到Web API后,反序列化得到的Stuff对象总是空的,而且想使用模型绑定却没生效,对吧?先看看问题出在哪,再给你修复方案:

问题根源分析

  • 你的AJAX请求虽然用了JSON.stringify()把数据转成JSON字符串,但没有设置contentType: "application/json",导致Web API把请求当成普通表单数据解析,最终得到了结构异常的JObject:{"{\"siffra\":23,\"text\":\"Meddelande från andra sidan!\"}": ""}——本质是把整个JSON字符串当成了一个表单键,值为空。
  • 你当前手动用JsonConvert反序列化,而Web API的模型绑定默认只识别带get/set的属性,但你的Stuff类里的成员是字段,这也是模型绑定没生效的核心原因。

修复方案(直接用上模型绑定)

1. 修改jQuery AJAX请求,添加contentType设置

var data = { siffra : 23, text : "Meddelande från andra sidan!" }
$.ajax({
    url: "api/Stuff/PostStuff",
    method: "POST",
    data: JSON.stringify(data),
    contentType: "application/json", // 关键:告诉服务器请求体是JSON格式
    success: function (result) {
        console.log("SUCESS: " + result);
    },
    error: function (data) {
        console.log("error: " + data.responseText);
    }
});

2. 改造Web API控制器方法与Stuff类,使用模型绑定

// 直接将Stuff作为参数,Web API会自动完成反序列化
public string PostStuff(Stuff stuff) {
    // 此时stuff的siffra和text已正确赋值
    return "thanks";
}

// 将字段改为带get/set的属性,让模型绑定能识别
public class Stuff {
    public int siffra { get; set; }
    public string text { get; set; }
}

这样修改后,你不需要再手动处理JObject,Web API会自动帮你完成JSON到Stuff对象的绑定,属性值也能正确获取啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:56:41