可以从ajax调用获取webmethod参数的arraylist吗?

时间:2016-06-08 08:03:53

标签: c# jquery ajax arraylist

我在C#webforms中为我的Web应用程序创建了一个由Ajax调用调用的web方法。

    [System.Web.Services.WebMethod]
    public static string DataExport(ArrayList arr)
    {

    }

如何从"数据"填充我的方法DataExport的ArrayList。 ajax电话的领域?

现在我的Ajax很简单:

 $.ajax({
                type: "POST",
                async: true,
                url: "Default.aspx/DataExport",
                data: '{ arr:"' + test + '"}',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (response) { },
                error: function (response) { }
            });

在数据字段中测试是JSON。我进行了几次测试,如果我用字符串替换ArrayList并且我得到一个带有JSON内联的字符串,它就可以工作。

您是否知道如何修改数据以填充webmethod的类型ArrayList?

2 个答案:

答案 0 :(得分:1)

您发布到服务器的数据不是数组,它是具有单个属性arr的对象。该属性arr可能是一个数组......我们无法从您的代码片段中分辨出来。

您实现的WebMethod应支持JSON反序列化,但您需要将已发布的JSON和WebMethod参数类型排成一行。

  • 创建代表列表中一个项目的对象(例如Person
  • ArrayList切换到List<T>(例如List<Person>
  • 更新您的javascript以POST一组Person个对象

为了从这里到那里,我建议首先编写代码以接受单个实例,然后扩展代码以接受集合并发布javascript数组[]

public class Person {  public string Name { get; set; } }
public void DataExport(Person item) {

}

var postData =  '{ "Name": "Some Person" }';
$.ajax(url, postData);

答案 1 :(得分:1)

您可以在Web方法中接受JSON对象作为字符串,然后使用通用JsonConvert.DeserializeObject方法应用必要的反序列化吗?

var test = JSON.stringify(valuesToBePassed);

$.ajax({
            type: "POST",
            async: true,
            url: "Default.aspx/DataExport",
            data: test,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) { },
            error: function (response) { }
        });

然后使用以下代码段在Web方法中提取对象:

var list = JsonConvert.DeserializeObject<List<MyObjectType>>(json);

list替换List<MyObjectType>。或..如果您不希望从对象创建模型,可以使用以下内容:

JsonConvert.DeserializeObject<List<Dictionary<string, Dictionary<string, string>>>>(test);