无效的JSON原语:lookupID。"," StackTrace":"

时间:2016-02-04 23:29:27

标签: c# json ajax serialization webmethod

我无法弄清楚为什么会收到此错误。当我在变量周围加上引号时,它实际上是发送文本而不是变量。

  

{"消息":"无效的JSON原语:lookupID。"," StackTrace":" System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary上的System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\ r \ n在System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\ r \ n中的System.Web。 (Int32深度)\ r \ n在System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32深度)\ r \ n在System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String输入,Int32 depthLimit,JavaScriptSerializer序列化程序) \ r \ n在System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer,String input,Type type,Int32 depthLimit)\ r \ n在System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T](String)输入)\ r \ n System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context,JavaScriptSerializer serializer)\ r \ n在System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMe) thodData methodData,HttpContext context)\ r \ n在System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context,WebServiceMethodData methodData)"," ExceptionType":" System.ArgumentException& #34;}

我的ajax功能:

function GetVisitDates(lookupID, IsMiscellaneous) {
    $.ajax({
    type: "POST",
    url: "Home.aspx/GetVisitDates",
    data: "{ 'LookupID': lookupID, 'isMiscellaneous': IsMiscellaneous }",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    async: true,
...

它调用的方法:

[WebMethod]
    public static string GetVisitDates(int LookupID, bool isMiscellaneous)

2 个答案:

答案 0 :(得分:3)

在发送数据之前,您需要先JSON.stringify()数据 - 遗憾的是.aspx WebMethods对于如何绑定参数非常挑剔:)

如果您使用浏览器的F12工具查看实际的POST请求,您会看到您的代码当前发送的有效负载如下:

LookupID=20&isMiscellaneous=true

但是为了正确绑定它,它需要是实际的JSON,如下所示:

{LookupID: 20, isMiscellaneous: true}

这就是JSON.stringify的用武之地。

以下是我用来复制并确认这解决问题的代码:

Home.aspx.cs中的

public partial class Home : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    [WebMethod]
    public static string GetVisitDates(int LookupID, bool isMiscellaneous)
    {
        return string.Format("{0}-{1}", LookupID, isMiscellaneous);
    }
}

在客户端(在我的例子中只是Home.aspx中的一个脚本):

 $(document).ready(function() {
            GetVisitDates(20, true);
        });

        function GetVisitDates(lookupID, isMiscellaneous) {
            var data = {
                "LookupID": lookupID,
                "isMiscellaneous": isMiscellaneous
            };

           data = JSON.stringify(data);

            $.ajax({
                    type: "POST",
                    url: "Home.aspx/GetVisitDates",
                    data: data,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    async: true,
                    success: function(data) {
                        console.log(data);
                    },
                    error: function(xhr) {
                        console.log(xhr);
                    }
                }
            );
        }

最后,here是一个非常适合在Webforms上使用ajax的参考...希望有所帮助!

答案 1 :(得分:0)

我相信引号会把它扔掉。

我首先将JSON放入自己的变量中:

NON-NULL

或者,这可能有用,但并不完全确定:

function GetVisitDates(lookupID, IsMiscellaneous) {
var data = {
   "LookupID" : lookupID,
   "isMiscellaneous" : isMiscellaneous
};

$.ajax({
type: "POST",
url: "Home.aspx/GetVisitDates",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
...
编辑:Steven Bryne是正确的答案。您想要添加JSON.stringify()。 我也更新了我的答案。

另见:Invalid JSON primitive ERROR