C# jQuery WebMethod解析错误

C# jQuery WebMethod解析错误,c#,jquery,.net,C#,Jquery,.net,我似乎在从jQuery调用WebMethod时遇到了问题,我将本文作为我的出发点: JS function WebMethod(fn, paramArray, successFn, errorFn) { //----------------------------------------------------------------------+ // Create list of parameters in the form:

我似乎在从jQuery调用WebMethod时遇到了问题,我将本文作为我的出发点:

JS

    function WebMethod(fn, paramArray, successFn, errorFn) 
     {
        //----------------------------------------------------------------------+
        // Create list of parameters in the form:                               |
        // {'paramName1':'paramValue1','paramName2':'paramValue2'}              |
        //----------------------------------------------------------------------+
        var paramList = '';
        if (paramArray.length > 0) {
            for (var i = 0; i < paramArray.length; i += 2) {
                if (paramList.length > 0) paramList += ',';
                paramList += '"' + paramArray[i] + '":"' + paramArray[i + 1] + '"';
            }
        }

        paramList = '{' + paramList + '}';

        //----------------------------------------------------------------------+
        // Call the WEB method                                                  |
        //----------------------------------------------------------------------+
        $.ajax({
            type: 'POST',
            url: 'ContractView.aspx' + '/' + fn,
            contentType: 'application/json; charset=utf-8',
            data: paramList,
            dataType: 'json',
            success: successFn,
            error: errorFn
        });
    };
C#(注意这些是测试方法,忽略逻辑)

调试JS时,paramList似乎是正确的JSON(或者我相信是这样):

{“AQ”:“140000”,“SOQ”:“1169”}

这导致了一个语法错误,我不确定为什么

谢谢你的帮助


谢谢

哦,不,请不要像您那样使用字符串操作手动构建JSON。那太可怕了。看一看

以下是正确的方法:

function WebMethod(fn, paramArray, successFn, errorFn) {
    var paramList = { };
    if (paramArray.length > 0) {
        for (var i = 0; i < paramArray.length; i += 2) {
            paramList[paramArray[i]] = paramArray[i + 1];
        }
    }

    $.ajax({
        type: 'POST',
        url: 'ContractView.aspx' + '/' + fn,
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(paramList),
        dataType: 'json',
        success: successFn,
        error: errorFn
    });
}
函数WebMethod(fn,paramArray,successFn,errorFn){
var paramList={};
如果(paramArray.length>0){
对于(变量i=0;i

注意使用
JSON.stringify
方法对
paramList
对象进行正确的JSON编码。这种方法是内置在现代浏览器中的。如果您需要支持传统浏览器,可以将脚本包含到页面中。

我认为这不是正确的JSON。JSON应该有不带单引号的键,并且值必须在引号中。删除关键变量'AQ'和'SOQ'的引号,并尝试将paramlist构建为对象而不是字符串吗?类似于:
paramsList[paramArray[i]]=paramArray[i+1]
?根据$.ajax()文档,它应该在发送之前由jQuery正确序列化。我在使用JSON库时遇到各种冲突,因此我决定使用jQuery JSON库和数据:$.toJSON(paramList),这给了我以下JSON{“AQ”:“140000”,“SOQ”:“1169”},这仍然会导致“无效JSON”错误。为什么json库会返回不正确的json?
     [WebMethod]
        public static ContractsListPricing PriceContract(string AQ, string SOQ)
        {
            ContractsListPricing clp = new ContractsListPricing();

           // clp.Aq = nAQ * 2;
           // clp.Soq = nSOQ * 2;

            return clp;
        }
function WebMethod(fn, paramArray, successFn, errorFn) {
    var paramList = { };
    if (paramArray.length > 0) {
        for (var i = 0; i < paramArray.length; i += 2) {
            paramList[paramArray[i]] = paramArray[i + 1];
        }
    }

    $.ajax({
        type: 'POST',
        url: 'ContractView.aspx' + '/' + fn,
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(paramList),
        dataType: 'json',
        success: successFn,
        error: errorFn
    });
}