0

次のような配列の配列の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]]"}

エスケープされているか、適切にフォーマットされているようには見えません。何かが足りないようです。「データ」に「」のユニコード文字がまだあるのはなぜですか? ResponseFormat.Json がすべてを処理して json 形式にすると思いました。

4

1 に答える 1

1

実際には、配列の配列を含むjsonを返しません。'Data':[[45,43,50],[34,43,50]]json にカプセル化された文字列 ( ) を返します。

あなたのアプローチには2つの問題があります。

a)文字列操作を使用して手動でjsonを形成しないでください

b)メソッドで文字列ではなく実際のオブジェクトを返す

したがって、メソッドを以下のようなものに変更するとうまくいくはずです

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<int[]> GetData()
{
    return new List<int[]>() { new[] { 45, 43, 103 }, new[] { 34, 43, 230 } };
}
于 2013-05-02T18:36:39.917 に答える