我正在尝试返回像这样的数组数组的json对象:
{
'data': [[45,43,103],[34,43,230]]
}
在.NET 4.0中使用asmx,如下所示:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetData() {
StringBuilder sb = new StringBuilder();
sb.Append("'Data':[");
sb.Append("[45,43,103],");
sb.Append("[34,43,230]");
sb.Append("]");
return sb.ToString();
使用jQuery ajax调用:
$.ajax({
type: "POST",
url: url, //defined elsewhere
data: "{}",
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: update,
});
和
function update(data)
{
console.log (data.d[1][1]); //looking at second array second element
}
问题是来自asmx调用的响应看起来像这样,我的更新功能不起作用
{"d":"\u0027Data\u0027:[[45,43,50],[34,43,50]]"}
看起来他们没有被正确转义或格式化。好像我错过了什么。为什么'数据'仍然有'unicode chars'?我认为ResponseFormat.Json会把所有内容都放在json格式中。
答案 0 :(得分:1)
实际上你没有返回包含数组数组的json。您返回一个封装在json中的字符串('Data':[[45,43,50],[34,43,50]]
)。
你的方法有两个问题。
a)不使用字符串操作手动形成json
b)在您的方法中返回一个真实对象而不是字符串
因此,将您的方法更改为以下内容应该可以正常工作
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<int[]> GetData()
{
return new List<int[]>() { new[] { 45, 43, 103 }, new[] { 34, 43, 230 } };
}