Прежде чем я начну, я почти уверен ответ, данный здесь: - это 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]]"}
В некоторых случаях я хочу, чтобы ASP.NET использовал выходные данные этой функции, чтобы она могла динамически генерировать Javascript в заголовок веб-страницы, например:
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]]
Как лучше всего настроить создание JSON или его обработку ввремя динамического создания JS, чтобы я мог легко добавить массив массивов в строку 'var myJSArr'?
В надежде помочь кому-нибудь в будущем, я собираюсь отредактировать этот вопрос всвет ответов / комментариев проЗдесь я включил некоторый код, который оказался тем, что я хотел.Во-первых, 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
}
Это привело к созданию BLOB-объекта JSON, который выглядит следующим образом:
{"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);