我有这样的JSON字符串:
'{"1":[1,3,5],"2":[2,5,6],"3":[5,6,8]}'
我想将其发送到Web Api控制器而不使用ajax请求更改:
$.ajax({
type: "POST",
url: "Api/Serialize/Dict",
data: JSON.stringify(sendedData),
dataType: "json"
});
在Web Api中我有这样的方法:
[HttpPost]
public object Dict(Dictionary<int, List<int>> sendedData)
{
//code goes here
return null;
}
总是sendedData == null.
另外一句话:我不知道如何将JSON反序列化为(Dictionary<int, List<int>>
。
感谢您的回答。
答案 0 :(得分:1)
试试这个
[HttpPost]
public object Dict(Dictionary<int, List<int>> sendedData)
{
var d1 = Request.Content.ReadAsStreamAsync().Result;
var rawJson = new StreamReader(d1).ReadToEnd();
sendedData=Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<int, List<string>>>(rawJson);
}
答案 1 :(得分:1)
您可以像这样发送数据:
{"sendedData":[{"key":"1","value":[1,3,5]},{"key":"2","value":[2,5,6]},{"key":"3","value":[5,6,8]}]}
控制器中功能的图像: Dict
答案 2 :(得分:0)
试一试:
Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<int, List<string>>>("{'1':[1,3,5],'2':[2,5,6],'3':[5,6,8]}");
答案 3 :(得分:0)
尝试使用:
public ActionResult Parse(string text)
{
Dictionary<int, List<int>> dictionary = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<int, List<int>>>(text);
return Json(dictionary.ToString(), JsonRequestBehavior.AllowGet);
}
当发送的数据在索引周围没有引号时,这是有效的:
{1:[1,3,5],2:[2,5,6],3:[5,6,8]}
还要确保在Javascript中发送对象:
data: {
text: JSON.stringify(sendedData)
},
答案 4 :(得分:0)
在执行ajax调用时指定内容类型参数,dataType用于返回结果:
$.ajax({
type: "POST",
url: "Api/Serialize/Dict",
contentType: "application/json; charset=utf-8", //!
data: JSON.stringify(sendedData)
});
答案 5 :(得分:0)
您错过了sendedData参数中的[FromBody]
批注。试试这个:
[HttpPost]
[Consumes("application/json")]
[Produces("application/json")]
public object Dict([FromBody] Dictionary<int, List<int>> sendedData)
{
//code goes here
return null;
}