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; }
}