admin管理员组

文章数量:1302502

I have such JSON string: '{"1":[1,3,5],"2":[2,5,6],"3":[5,6,8]}'

I want to send it to the Web Api Controller without changing using ajax request:

   $.ajax({
        type: "POST",
        url: "Api/Serialize/Dict",
        data: JSON.stringify(sendedData),
        dataType: "json"
    });

In Web Api I have such method:

    [HttpPost]
    public object Dict(Dictionary<int, List<int>> sendedData)
    {
        //code goes here
        return null;
    }

And always sendedData == null. Another words: I don't know how to deserialize JSON into (Dictionary<int, List<int>>.

Thank you for answer.

I have such JSON string: '{"1":[1,3,5],"2":[2,5,6],"3":[5,6,8]}'

I want to send it to the Web Api Controller without changing using ajax request:

   $.ajax({
        type: "POST",
        url: "Api/Serialize/Dict",
        data: JSON.stringify(sendedData),
        dataType: "json"
    });

In Web Api I have such method:

    [HttpPost]
    public object Dict(Dictionary<int, List<int>> sendedData)
    {
        //code goes here
        return null;
    }

And always sendedData == null. Another words: I don't know how to deserialize JSON into (Dictionary<int, List<int>>.

Thank you for answer.

Share edited May 28, 2020 at 10:19 Liam 29.8k28 gold badges138 silver badges200 bronze badges asked Apr 10, 2014 at 12:36 Taras StrizhykTaras Strizhyk 1351 gold badge2 silver badges9 bronze badges 2
  • Tried to solve this for some time - then read this : stackoverflow./questions/4710729/post-json-dictionary – Yasser Shaikh Commented Apr 10, 2014 at 13:41
  • Yeah, it appears that JSON is broken on Web API. – Hot Licks Commented Jun 4, 2014 at 17:13
Add a ment  | 

6 Answers 6

Reset to default 1

Try this

 [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);

    }

You can send the data like this:

{"sendedData":[{"key":"1","value":[1,3,5]},{"key":"2","value":[2,5,6]},{"key":"3","value":[5,6,8]}]}

Image of the function in the controller: Dict

Try it:

Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<int, List<string>>>("{'1':[1,3,5],'2':[2,5,6],'3':[5,6,8]}");

Try using:

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);
}

This works when the sent data doesn't have quotes around the indices:

{1:[1,3,5],2:[2,5,6],3:[5,6,8]}

Also make sure that you send an object in the Javascript:

data: { 
    text: JSON.stringify(sendedData)
},

specify the content type parameter when performing ajax call, dataType is for return result:

$.ajax({ 
       type: "POST",
       url: "Api/Serialize/Dict", 
       contentType: "application/json; charset=utf-8", //!
       data: JSON.stringify(sendedData) 
});

You missed the [FromBody] annotation in the sendedData param. Try this:

[HttpPost]
[Consumes("application/json")]
[Produces("application/json")]
public object Dict([FromBody] Dictionary<int, List<int>> sendedData)
{
    //code goes here
    return null;
}

本文标签: javascriptDeserialize JSON into dictionary in Web Api controllerStack Overflow