Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ashx中的getJSON数组参数数据_C#_Jquery_Asp.net_Json_Getjson - Fatal编程技术网

C# ashx中的getJSON数组参数数据

C# ashx中的getJSON数组参数数据,c#,jquery,asp.net,json,getjson,C#,Jquery,Asp.net,Json,Getjson,向.ashx处理程序传递数组参数时遇到问题。Querystring参数工作正常,但我不知道如何从ashx文件中访问数组 我的数组是一个名为list的字符串列表。下面是我如何调用getJSON方法的: jQuery.getJSON('Handlers/AccessoryUpdateHandler.ashx?action=updateselection&a=' + a_sku, function (list) { //... }); 在Accesso

向.ashx处理程序传递数组参数时遇到问题。Querystring参数工作正常,但我不知道如何从ashx文件中访问数组

我的数组是一个名为list的字符串列表。下面是我如何调用getJSON方法的:

jQuery.getJSON('Handlers/AccessoryUpdateHandler.ashx?action=updateselection&a=' + a_sku, function (list) {
            //...
        });
在AccessoryUpdateHandler.ashx中,我可以使用context.Request.querystring[a]获取querystring参数

但是如何获取阵列数据呢?我已经查看了Request.QueryString对象,但是没有任何东西看起来像我的数组


如果有更好的方法,我也很想知道。

也许你不应该依靠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\"}]";
然后,您的查询字符串可以构造为:

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);
注意:由于要反序列化到数组中,因此必须在反序列化函数中使用Rec[]。ary将是一个Rec数组,其中包含javascript数组中的所有数据。您需要引用System.Web.Extensions才能使用JavaScriptSerializer

编辑:

我以为你说的是一系列物体。如果它只是一个*long*s数组,那么以下几行就足够了:

string s = context.Request.QueryString["a"]; // HttpContext context
var jserializer = new JavaScriptSerializer();
var ary = jserializer.Deserialize<long[]>(s);

你不需要创建一个类。如果您有一个json对象数组,那么您只需要使用它。我不认为您对传递数组的需求应该决定您是按照其他人的建议使用get还是post

使用get,最惯用的方法是多次使用同一参数。e、 g

Handlers/AccessoryUpdateHandler.ashx?a=1&a=2&a=55
事实上,在大多数frameworks.NET中,当您从url获取一个参数时,通常会得到一个包含一个项的数组


我的建议是您解析context.Request.RawUrl

当我按照您的建议执行操作时,会出现错误:“无效的JSON原语:1003011331310030113295513。”当我调用“serializer.Deserializes”时。如果我在js文件中的数组上使用JSON.stringify,我会在同一点上得到错误“无法将类型为”System.String“的对象转换为”AccessoryUpdateHandler+Rec”类型。但这绝对是对我以前的进步!请记住,类成员上的类型必须与数组对象上的类型匹配。另一件事:如果json对象的某些成员可以为null,[比如在{id:,name:unknown}中,id将是未定义的/null],在这种情况下,您可能需要使用一个可为null的成员。例如:int?Id{get;set;}如果json对象中的Id可以为空,如果我在js文件中的数组上使用json.stringify,我会在同一点上得到错误“无法将System.String类型的对象转换为AccessoryUpdateHandler+Rec类型”。由于我无法想象你的确切情况,我建议你分步进行。如果json对象有大约10个成员,则可以除去一个或两个之外的所有成员,测试序列化是否在服务器端正确发生,然后逐步添加其他成员。这样你就可以知道失败的是什么。我的数组看起来不像你描述的那个,这可能是问题所在吗?这是stringify返回的字符串:“[1003011312013100301132833131310030113295513]”@markpsmith我似乎已经理解了复杂的场景。我对答案进行了编辑,以适应您的情况。