需要通过对 Web 服务的 AJAX 调用将 Sqlite 表的值发送到服务器。我不知道如何以 Web 服务可以接受的方式打包该表的行。
Web 方法签名
[WebMethod]
public void CVW(string[][] qAndA)
{}
客户端
var qAndA = new Array();
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: "Service.asmx/CVW",
data: JSON.stringify({ qAndA: qAndA }),
success: function (data) {
},
error: function (xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message);
}
});
}, onSQLError);
这给了我No parameterless constructor defined for type System.String
. 我尝试将 web 方法参数更改为 string[] 和 List 和相同的东西。
当我查看 Fire Bug 中发送的内容时,我发现它发送的数量与 Sqlite 查询中返回的行Object[object Object][object Object][object Object]...
数一样多。[object Object]
C# 中可以用作参数类型的对应类型是什么?
编辑:最终解决方案
在javascript中我不得不改变
data: JSON.stringify({ qAndA: qAndA }),
至
var json = JSON.stringify(qAndA);
data: JSON.stringify({ qAndA: json });
并因此改变了Web方法
[WebMethod]
public void CVW(string qAndA)
JavaScriptSerializer ser = new JavaScriptSerializer();
List<CVWQuestion> list = ser.Deserialize<List<CVWQuestion>>(qAndA);
[Serializable]
public class CVWQuestion
{
public string CallNumber {get;set;}
public string Question { get; set; }
public string P1 { get; set; }
public string P2 { get; set; }
public string P3 { get; set; }
public string P4 { get; set; }
public string P5 { get; set; }
public string P6 { get; set; }
}