私が始める前に、私は確信していますthe answer given here is私の答えの90%ですが、私はどのように私の状況にそれを適用する方法を見つけることができないので、私は助けに感謝したいと思います。ASP.NET JavascriptSerializerは不要なarray-within-arrayを提供しますか?
私は次のように配列の配列をシリアライズするJavasriptSerializerを使用します。ときに私がございます
{"d":"[[1,10,100],[2,20,200],[3,30,300],[4,40,400],[5,50,500]]"}
:
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
}
は私が応答でこのような何かを得ますASP.NETがこの関数の出力を消費して、動的にJのJavaScriptヘッダーを生成できるようにするJSONの作成のいずれかを調整するための最良の方法は何
var myJSArr = [[1,10,100],[2,20,200],[3,30,300],[4,40,400],[5,50,500]]
か:私は私のページ内で、次のJSで終わるようにするために
HtmlGenericControl Include = new HtmlGenericControl("script");
Include.Attributes.Add("type", "text/javascript");
Include.InnerHtml = "var myJSArr = " + foo() + ";" ;
Page.Header.Controls.Add(Include);
:このようなウェブページ彼動的JSの作成時にその配列を処理して、配列の配列を 'var myJSArr'という文字列に簡単に追加できるようにしますか?私は私が望んで行うことを証明し、ここでいくつかのコードを含めることの回答/コメントの光の中でこの質問を編集するつもりだ未来の誰かを助けることを期待して
。まず、これは次のようになりますJSONのブロブが生じ
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
}
...配列ではない、このような文字列を返すために必要なFOOは:
{"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);
シリアライザからの引用出力が疑わしいと思われる場合、 "d"プロパティの値は配列でなければならない文字列です。 '{" d ":[[1,10,100]、[2,20,200]、[3,30,300]、[4,40,400]、[5,50,500]}}のようなものではないでしょうか? (今は配列の周りに引用符がないことに注意してください。) –
ご意見ありがとうございます。あなたは文字列である "d"の値が問題だったのは間違いありません。問題を混乱させるだけで、私はもう少し考えてみるまでこれが正しい答えだと思った!あなたの助けをもう一度ありがとう。 – shearichard