也许您不应该依赖 QueryString 来传递这种数据。我建议您改用“POST”方法。在任何一种情况下,使用您正在使用的方法,您都无法将数据作为数组传递。将数组转换为字符串。如果您不想手动将数组转换为字符串,像 stringify() 这样的实用程序可以派上用场。当您从处理程序中的 Request.QueryString 或 Request.Form(如果您使用 post)中提取字符串时,您可以轻松使用 JavaScriptSerializer 使用一个简单的 C# 类进行反序列化,该类的架构类似于您的 json 数组。
已编辑:插图
这样的数组:
var ary = [{ "id": "1", "name": "Mark" }, { "id": "2", "name": "John"}];
可以转换成这样的字符串:
var aryS = "[{\"id\":\"1\",\"name\":\"Mark\"},{\"id\":\"1\",\"name\":\"Mark\"}]";
那么,您的 QueryString 可以构造为:
jQuery.getJSON('Handlers/AccessoryUpdateHandler.ashx?action=updateselection&a=' + aryS, function (list) {
//...
});
当您转到处理程序代码时,您可以有一个简单的类来帮助您反序列化数据:
class Rec
{
public int Id { get; set; }
public string Name { get; set; }
}
有了这些,反序列化的最后一步是:
string s = context.Request.QueryString["a"]; // HttpContext context
var jserializer = new JavaScriptSerializer();
var ary = jserializer.Deserialize<Rec[]>(s);
请注意,您必须在 Deserialize 函数中使用 Rec[],因为您要反序列化为数组。 ary 将是一个 Rec 数组,其中包含您的 javascript 数组中的所有数据。使用 JavaScriptSerializer 需要引用 System.Web.Extensions
编辑:
我以为你在谈论一组对象。如果它只是一个 *long*s 的数组,那么以下几行就足够了:
string s = context.Request.QueryString["a"]; // HttpContext context
var jserializer = new JavaScriptSerializer();
var ary = jserializer.Deserialize<long[]>(s);
而且你不需要创建一个类。如果你有一个 json 对象数组,你只需要它