0

始める前に、ここで与えられた答えが私の答えの90%であると確信していますが、それを自分の状況に適用する方法がわからないので、助けていただければ幸いです.

JavasriptSerializerを使用して、次のように配列の配列をシリアル化すると:

string foo()
{
    int[][] JaggedArray = new int[5][];
    int i = 0;
    JaggedArray[i] = new int[] { 1, 10, 100 };
    i = i + 1;
    JaggedArray[i] = new int[] { 2, 20, 200 };
    i = i + 1;
    JaggedArray[i] = new int[] { 3, 30, 300 };
    i = i + 1;
    JaggedArray[i] = new int[] { 4, 40, 400 };
    i = i + 1;
    JaggedArray[i] = new int[] { 5, 50, 500 };
    i = i + 1;
    JavaScriptSerializer js = new JavaScriptSerializer();
    string strJSON = js.Serialize(JaggedArray);
    return strJSON
}

私は応答でこのようなものを受け取ります:

{"d":"[[1,10,100],[2,20,200],[3,30,300],[4,40,400],[5,50,500]]"}

次のように、Web ページのヘッダーに Javascript を動的に生成できるようにするために、ASP.NET にこの関数の出力を使用させたい場合があります。

HtmlGenericControl Include = new HtmlGenericControl("script");
Include.Attributes.Add("type", "text/javascript");
Include.InnerHtml = "var myJSArr = " + foo() + ";" ;
Page.Header.Controls.Add(Include);

私のページ内で次のJSになるために:

var myJSArr = [[1,10,100],[2,20,200],[3,30,300],[4,40,400],[5,50,500]]

配列の配列を文字列 'var myJSArr' に簡単に追加できるように、動的 JS 作成時に JSON の作成またはその処理を調整する最良の方法は何ですか?


将来誰かを助けることを期待して、提供された回答/コメントに照らしてこの質問を編集し、私が望んでいたことが証明されたコードをここに含めます。最初に foo は、このような文字列ではなく配列を返す必要がありました...

string foo()
{
    int[][] JaggedArray = new int[5][];
    int i = 0;
    JaggedArray[i] = new int[] { 1, 10, 100 };
    i = i + 1;
    JaggedArray[i] = new int[] { 2, 20, 200 };
    i = i + 1;
    JaggedArray[i] = new int[] { 3, 30, 300 };
    i = i + 1;
    JaggedArray[i] = new int[] { 4, 40, 400 };
    i = i + 1;
    JaggedArray[i] = new int[] { 5, 50, 500 };
    i = i + 1;

    return JaggedArray
}

これにより、次のような JSON blob が生成されました。

{"d":[[100,101,102],[200,201,202],[300,301,302],[400,401,402],[500,501,502]]}

その後、次のコードを使用して JS コードの動的ビルドを行うことができました。次のコードがそれを行うための最良の方法であると確信しているわけではありません(ひどく複雑であってはならない何かのための非常に多くのコードのように思えます)が、少なくとも機能します

Dictionary<string, int[][]> dd = js.Deserialize<Dictionary<string, int[][]>>(foo());
int[][] arrASRValues = dd["d"];
List<string> lstASRValues = new List<string>(arrASRValues.Length);
foreach(int[] lstASRElement in arrASRValues)
{
    lstASRValues.Add(String.Format("[{0},{1},{2}]", lstASRElement[0], lstASRElement[1], lstASRElement[2]));
}
String strASRValues = String.Join(",", lstASRValues.ToArray());
strASRValues = "val myJSArr = [" + strASRValues + "];";
Include.InnerHtml = strASRValues;
Page.Header.Controls.Add(Include);
4

1 に答える 1

0

必要な場合にのみデータをシリアル化できるように、配列の作成と JSON シリアル化を分離する必要があります。

Web サービスから取得する応答の問題は、2 回シリアル化されていることです。最初に配列を文字列にシリアル化すると、フレームワークがその文字列をオブジェクトに入れてシリアル化します。Web サービスから配列を返すだけで、フレームワークがそれをシリアル化できるようにする必要があります。

配列をスクリプトに入れるときにのみ、配列をシリアル化する必要があります。

于 2011-06-19T06:16:34.537 に答える