我在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?
答案 0 :(得分:1)
您发布到服务器的数据不是数组,它是具有单个属性arr
的对象。该属性arr可能是一个数组......我们无法从您的代码片段中分辨出来。
您实现的WebMethod应支持JSON反序列化,但您需要将已发布的JSON和WebMethod参数类型排成一行。
Person
)ArrayList
切换到List<T>
(例如List<Person>
)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);