【发布时间】:2016-04-19 20:56:10
【问题描述】:
大家早上好。我已经尝试这样做了好几个星期了,但一直在绕圈子。我有一个简单的 jQuery Ajax 函数,可以将数据发布到后面代码中的 c# 函数。
基本上是想传递一个要处理的选中复选框字段的列表。 当我提交它时,我可以看到正在发出的请求和正在发送的 json:
{"item":["Section1","Section2","Section2Sub1","Section2Sub2","Section3"]}
它到达了服务器端,但是在尝试反序列化它时,它让我返回以下错误消息:
“无效的 JSON 原语:System.Object。”
var selection = serializer.Deserialize<string>(item.ToString());
这是我的代码 sn-p:
客户端 $("#Submit").click(函数 (e) { 变量计数 = 0; var countChecked = 0; 面积对象 = []; $('input[type=checkbox]').each(function () { 计数++; 如果(this.checked){ //countChecked++; //tmp = { // "区域": $(this).attr("id") //}; areaObj.push($(this).attr("id")); } }); }); 功能子点击(项目){ $.ajax({ 类型:“发布”, url: "Default.aspx/SubData", 数据:JSON.stringify({ item: item }), //data: "{'item':" + JSON.stringify(item) + "}", 数据类型:“json”, 内容类型:“应用程序/json;字符集=utf-8” }); }; c# Default.aspx.cs [网络方法] 公共静态字符串子数据(选择项) { var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); //这里发生错误 var selection = serializer.Deserialize(item.ToString()); 返回“这是成功的”; } 公共课选择 { 公共字符串标题 { 获取;放; } 公共字符串描述 { 获取;放; } 公共列表 KeyValues { 获取;放; } } 公共类键值 { 公共 int AreaID { 获取;放; } 公共字符串区域 { 获取;放; } 公共 int 值 { 获取;放; } }任何人都可以就出了什么问题提供任何指示吗?
【问题讨论】:
-
您对
item.ToString()的使用向我表明您实际上并没有解析您认为的json。您正在解析文本System.Object,这是.ToString()在对象上的结果。如果你在反序列化行设置断点,你会看到item不是字符串。 -
它进一步看起来像
item是已经反序列化的对象。 -
拍脑门 当然是。我花了这么长时间看这个,我对它有点雪盲......谢谢罗布!你能“回答问题”,我会把它标记为解决方案
-
别担心,伙计,很高兴它有帮助:)