早上好。我已经尝试了几个星期但是继续进行圈子。我有一个简单的jQuery Ajax函数,它将数据发送到后面代码中的c#函数。
基本上想要传递要处理的所选复选框字段的列表。 当我提交它时,我可以看到正在发出请求并发送了json:
{"item":["Section1","Section2","Section2Sub1","Section2Sub2","Section3"]}
它到达服务器端,但在尝试反序列化时,它会将我踢回以下错误消息:
"无效的JSON原语:System.Object。"
var selection = serializer.Deserialize<string>(item.ToString());
这是我的代码段:
client side $("#Submit").click(function (e) { var count = 0; var countChecked = 0; areaObj = []; $('input[type=checkbox]').each(function () { count++; if (this.checked) { //countChecked++; //tmp = { // "Area": $(this).attr("id") //}; areaObj.push($(this).attr("id")); } }); }); function subClick(item) { $.ajax({ type: "POST", url: "Default.aspx/SubData", data: JSON.stringify({ item: item }), //data: "{'item':" + JSON.stringify(item) + "}", dataType: "json", contentType: "application/json; charset=utf-8" }); }; c# Default.aspx.cs [WebMethod] public static string SubData(Selection item) { var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); //ERROR OCCURS HERE var selection = serializer.Deserialize(item.ToString()); return "this is successful"; } public class Selection { public string Title { get; set; } public string Description { get; set; } public List KeyValues { get; set; } } public class KeyValues { public int AreaID { get; set; } public string Area { get; set; } public int Value { get; set; } }
任何人都可以提供有关出错的指示吗?
答案 0 :(得分:1)
public static string SubData(Selection item)
{
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
//ERROR OCCURS HERE
var selection = serializer.Deserialize(item.ToString());
return "this is successful";
}
这里,item
不是字符串(因此不是发送的JSON)。由于您在其上调用ToString()
,因此库可能正在尝试反序列化类似于System.Object
的文本 - 这将失败。
快速浏览一下代码,看起来item
已经反序列化了,所以你不需要再做任何事了