asp.net json Web服务发送数组错误无法将类型为'System.String'的对象转换为'System.Collections.Generic.List`1 [System.String]'

时间:2013-08-13 12:11:55

标签: c# jquery asp.net ajax

我想使用ajax和webservice将数据从javascript插入数据库, 我有一些JQuery的控件,我得到它们的值并制作一个值的数组 。当我发送数组时,它会导致此错误 Cannot convert object of type 'System.String' to type'System.Collections.Generic.List1[System.String]'

这是Javascript

var variables = Array();
var i=0;
$('#Div_AdSubmition').find('.selectBox').each(function () {
    variables[i] = $(this).find('.selected').find(".text").html();
    i++;
});

$.ajax({
    type: 'post',
    data: "{ 'a':'" +variables + "'}",
    dataType: 'json',
    url: 'HomeWebService.asmx/insertAd',
    contentType: 'application/json; charset=utf-8',
    success: function (data) {

        alert("data : " + data.d);
    }
});

这是c#代码

[WebMethod]
public object insertAd(List<string> a)
{
    return a;
}

3 个答案:

答案 0 :(得分:1)

您需要像data这样的$.ajax调用JSON.stringify({'a': variables})参数:JSON

&lt; JSON变量不适用于&lt; IE8所以你想要包含一个}实现,就像答案中提到的那样here

此外,您在success函数中还有一个var someArr = ['el1', 'el2']; JSON.stringify({ 'param1': 1, 'param2': 'two' 'param3': someArr // etc });

因此,将来,如果您想为传递给Web服务的数据对象添加额外的参数,您可以像这样构建它:

var variables = Array();

var i = 0;
$('#Div_AdSubmition').find('.selectBox').each(function () {

  variables[i] = $(this).find('.selected').find(".text").html();

  i++;
});



$.ajax({
    type: 'post',
    data: JSON.stringify({'a': variables}),
    dataType: 'json',
    url: 'HomeWebService.asmx/insertAd',
    contentType: 'application/json; charset=utf-8',
    success: function (data) {

      alert("data : " + data.d);
    });

});

JavaScript的:

[WebMethod]
public object insertAd(List<string> a)
{
  return a;
}

C#

{{1}}

答案 1 :(得分:1)

data:要发送到服务器的数据。如果不是字符串,它将转换为查询字符串。它附加到GET请求的URL。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery会根据传统设置的值使用相同的键序列化多个值。

因此,尝试在ajax调用中添加一个新参数:

$.ajax({
    type: 'post',
    data: { 'a': variables }, // Notice some changes here
    dataType: 'json',
    traditional: true, // Your new parameter
    url: 'HomeWebService.asmx/insertAd',
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        alert("data : " + data.d);
    }
});

试试这种方式。也许您需要更改Web服务方法以期望array而不是List,但我不确定。

答案 2 :(得分:1)

试试这个

            data: JSON.stringify({ 'a': variables }),