Jquery Ajax POST到C#WebMethod错误"无效的JSON原语:System.Object。"

时间:2016-01-14 13:42:20

标签: c# jquery json ajax

早上好。我已经尝试了几个星期但是继续进行圈子。我有一个简单的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; }
    }

任何人都可以提供有关出错的指示吗?

1 个答案:

答案 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已经反序列化了,所以你不需要再做任何事了