3

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

3 に答える 3

0

最終的に私のために働いたコードについては、私の編集した投稿を参照してください。大部分は@SteveBに見つかりましたが、回答として送信されなかったため、受け入れることができませんでした。

于 2012-11-26T16:03:19.330 に答える
-1

String[][]パラメータを単なる文字列に変更します。送信されるデータは単なる文字列です。文字列化されたJSONオブジェクトから解析可能なものに変換する必要があります。JObjectを調べます。

文字列化されたJSONからの変換は次のようになります...

JObject.parse(myJSONString)

Webサービスを次のようなものに変更します

public void CVW(string qAndAStringJson){

   Object qAndAObj = JObject.parse(qAndAStringJson);
   string someVar = qAndAObj["someStringIndex"];

}

ここでStringifyのドキュメントを確認してください。Stringifyを呼び出すと、データがJSONオブジェクトを表す文字列に変更されます。

リンクからこれを取りました。

JSON.stringify({x: 5, y: 6}); // '{"x":5,"y":6}' or '{"y":6,"x":5}'

ただ1つの長い文字列であることに注意してください。

したがってJObject.parse()、Webサービスメソッドで'{"x":5、 "y":6}'を呼び出すと、次のような呼び出しを行うことができます。

string obj = JOBject.Parse('{"x":5,"y":6}');

string result = obj["x"]; //result = 5

于 2012-11-20T14:36:00.733 に答える
-1

次の形式で2D配列を渡すことができます

{
    "values[0][0]": "Some value",
    "values[1][0]": "Some value",
    "values[0][1]": "Some value",
    "values[1][2]": "Some value",
    "values[2][0]": "Some value",
    "values[0][2]": "Some value",
    "values[2][3]": "Some value",
    ...
}

または、前述のように、JSON.stringifyを使用します。

また、この投稿「C#でJSONを解析する」もご覧ください。これは役立つかもしれません。

于 2012-11-20T14:56:58.487 に答える