在我开始之前,我很确定这里给出的答案是我答案的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]]
在动态JS创建时,调整JSON的创建或处理的最佳方法是什么,以便我可以轻松地将数组数组附加到字符串"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
}
这导致了一个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);
您应该将数组的创建与JSON串行化分开,这样您就可以仅在需要时串行化数据。
你从web服务得到的响应的问题是它已经被串行化了两次。首先将数组串行化为字符串,然后框架将该字符串放入对象中并串行化。您应该只从web服务返回数组,并让框架为您序列化它。
您只需要在将数组放入脚本中时对其进行串行化。