我需要能够在ASP.NET应用程序中通过AJAX将字符串数组和字符串数组数组传递给Web服务。但我一直在
{"Message":"Invalid object passed in, : or } expected. (16): { basicInfo:\"[\"TESTCO\",\"TESTCO\",\"PO BOX 0\",\"My City\",\"MyState\",\"My Zip\",\"MyPhone\",\"TEST1 - TEST, TEST3 - TEST, \",\"11/15/2012\",\"16:36\",\"myname\",\"1202160021\"]\"}","StackTrace":" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}
我对JSON和序列化以及所有这些都没有很好的把握。所以我真的不知道自己做错了什么。
var cvwOther = new Array();
var equipAssign = new Array();
var qAndA = new Array();
var binfo = new Array(storeinfo[2], storeinfo[6], storeinfo[7], storeinfo[8], storeinfo[9],
storeinfo[10], storeinfo[11], storeinfo[12], getToday(), getNow(), userinfo[0], call);
function submitCVW(call) {
db.transaction(function (tx) {
tx.executeSql("Select * From CVWOther Where CallNumber=?", [call], function (tx, result) {
var i = 0;
$.each(result.rows, function () {
cvwOther[i] = result.rows.item(i);
i++;
});
}, onSQLError);
tx.executeSql("Select * From EquipAssign Where CallNumber=?", [call], function (tx, result) {
var i = 0;
$.each(result.rows, function () {
equipAssign[i] = result.rows.item(i);
i++;
});
}, onSQLError);
tx.executeSql("Select * From CVW Where CallNumber=?", [call], function (tx, result) {
var i = 0;
$.each(result.rows, function () {
qAndA[i] = result.rows.item(i);
i++;
});
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json",
url: "MyService.asmx/CVW",
data: '{ basicInfo:"' + JSON.stringify(bInfo) + '", cvwOther:"' + JSON.stringify(cvwOther) + '"}',
success: function(data) {
},
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message);
}
});
}, onSQLError);
});
}
网络方法签名
[WebMethod]
public void SubmitCVW(string[] basicInfo, string[][] cvwOther)
答案 0 :(得分:0)
JSON和javascript文字之间的主要区别在于您的对象属性名称需要引用:
{
"attr_1" : "whatever", // VALID JSON
attr_2 : "something" // INVALID JSON
}
话虽如此,当您使用JSON.stringify()
方法时,绝对没有理由需要构建JSON字符串。而是构建要编码的数据,然后在其上使用stringify()
方法。
// Why do this ...
data: '{ basicInfo:"' + JSON.stringify(bInfo) + '", cvwOther:"' + JSON.stringify(cvwOther) + '"}',
// ... when you can do this?
data: JSON.stringify( {basicInfo:bInfo, cvwOther:cvwOther} );