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)

我会将网络服务更改为类似

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

请注意,它只是一个长字符串。

因此,如果您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

您可以按以下格式传递二维数组

{
    "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

另外,请查看这篇文章Parse JSON in C#,它可能对您有所帮助。

于 2012-11-20T14:56:58.487 回答