在 ASP.NET/C# 中:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Script.Serialization" %>
<%
JavaScriptSerializer jss = new JavaScriptSerializer();
string[] fruits = new string[3] {"apple","banana","crunchberries"};
string output = jss.Serialize(fruits);
%>
<html>
fruits=<%=output%>
</html>
返回fruits=["apple","banana","crunchberries"]
在 ASP.NET/VB.NET 中:
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Web.Script.Serialization" %>
<%
dim jss as new JavaScriptSerializer()
dim fruits = new String(2) {"apple","banana","crunchberries"}
dim output as string = jss.Serialize(fruits)
%>
<html>
fruits=<%=output%>
</html>
返回fruits=["apple","banana","crunchberries"]
但在 ASP.NET/JScript.NET 中:
<%@ Page Language="JScript" %>
<%@ Import Namespace="System.Web.Script.Serialization" %>
<%
var jss:JavaScriptSerializer = new JavaScriptSerializer;
var fruits = ["apple","banana","crunchberries"];
var output = jss.Serialize(fruits);
%>
<html>
fruits=<%=output%>
</html>
返回fruits=["0","1","2"]
这似乎完全被打破了。可以通过显式声明水果的数据类型来修复它,这使其成为“本机数组”:
<%@ Page Language="JScript" %>
<%@ Import Namespace="System.Web.Script.Serialization" %>
<%
var jss:JavaScriptSerializer = new JavaScriptSerializer;
var fruits:String = ["apple","banana","crunchberries"];
var output = jss.Serialize(fruits);
%>
<html>
fruits=<%=output%>
</html>
返回fruits=["apple","banana","crunchberries"]
我不明白为什么要获得正确的序列化类型是强制性的。(var fruits = ["apple","banana","crunchberries",5]
可能是糟糕的代码,但它在 Javascript 和 Jscript 中都是合法的。)假设 JScript 数组比本机数组慢,但它们仍然可以工作,对吧?