【问题标题】:2 dimenssion C# string array to js2维C#字符串数组到js
【发布时间】:2014-02-05 18:53:45
【问题描述】:

我想向我的 JS 客户端页面发送一个 C# 2 维度字符串数组。

服务器:

string[,] info = ib.GetInfo();
//info is [["string1","string2","string3"],["string4","string5","string6"]]

JavaScriptSerializer ser = new JavaScriptSerializer();           
return this.Content((new JavaScriptSerializer()).Serialize(info), "text/javascript");

在客户端 JS 端:

var mysr= JSON.parse(resp );

"string1","string2","string3","string4","string5","string6"

结果 mysr 是一维数组!

怎么了?任何帮助,将不胜感激。字符串也可以包含引号和双引号

【问题讨论】:

  • JSON.parse 应该能够毫无问题地处理二维数组。我认为问题在于JavaScriptSerializer 将其转换为一维数组。
  • 你能发布在客户端上看起来如何响应值吗?
  • 我同意@nderscore,这听起来确实像是序列化方式的问题。您能否验证 id.GetInfo(); 返回 string[,] 而不是 string[][]。如果不是这种情况,您很可能会遇到异常,但只是作为健全性检查...另外,尝试创建一个嵌套循环将 string[,] 转换为 string[][] 并尝试将其序列化,只是为了看看会发生什么...

标签: c# javascript arrays json javascriptserializer


【解决方案1】:

这就是 JavaScriptSerializer 的工作方式。查看这些代码

string[,] info1 = new string[2,3]{{"string1","string2","string3"},
                                  {"string4","string5","string6"}};
var json1 = new JavaScriptSerializer().Serialize(info1);

json => ["string1","string2","string3","string4","string5","string6"]

string[][] info2 = new string[][] { new[]{ "string1", "string2", "string3" }, 
                                    new[]{ "string4", "string5", "string6" } };
var json2 = new JavaScriptSerializer().Serialize(info2);

json => [["string1","string2","string3"],["string4","string5","string6"]]

如果您无法更改方法GetInfo() 的返回类型。我建议使用Json.Net

var json1 = JsonConvert.SerializeObject(info1);

它会如你所愿返回 json 字符串。

【讨论】:

  • 当您发布此内容时,我正在输入我的答案,建议(尝试)将 string[,] 转换为 string[][]。完美的时机:)
  • 确实,我意识到 [,] 对于 JSON 是错误的。现在一切都按预期工作。非常感谢!我只需要更改 getinfo() 的返回类型。在 JS 客户端我仍然使用 JSON.parse(),eval 也可以。
【解决方案2】:

多维数组被序列化为一维数组。可以使用交错数组代替二维数组

您也可以使用Json.NET。 Json.NET 4.5 Release 8 支持多维数组。

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 2011-08-16
    • 2020-01-14
    • 2014-04-18
    • 1970-01-01
    • 2019-12-21
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多