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
相关产品推荐
相关产品推荐

