2014-04-10 81 views
4

我有这样的JSON字符串: '{"1":[1,3,5],"2":[2,5,6],"3":[5,6,8]}'反序列化JSON到网络API控制器字典

我想将它发送到网络API控制器不使用Ajax请求改变:

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

在网页API我有这样的方法:

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

而且总是sendedData == null.换句话说:我不知道如何反序列化JSON到(Dictionary<int, List<int>>

谢谢你的回答。

+0

试图解决这一些时间 - 然后阅读:http://stackoverflow.com/questions/4710729/post-json-dictionary – Yasser

+0

是的,它似乎JSON在Web API上被破坏。 –

回答

0

试试:

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

试试这个

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

    } 
+0

我尝试过,但rawJson是空字符串... –

+1

尝试'String rawJson = Request.Content.ReadAsStringAsync()。Result;' –

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) 
}, 
0

执行Ajax调用时指定的内容类型参数,数据类型的返回结果:

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

他的问题是他正在构建的ajax调用,而不是服务器端。他使用dataType(用于结果),其中contentType应该被指定为application/json。我已经在他的另一个类似的线程(他有两个)回答了他,在那里为那些试图找出问题的人复制了答案。其中一个线程应该作为重复关闭。 – Andrew