简体   繁体   中英

asp.net json web service sending array error Cannot convert object of type 'System.String' to type 'System.Collections.Generic.List`1[System.String]'

I want to insert data from JavaScript to database using ajax and webservice, I have some controls which by jQuery I get their values and make an array of their values.

When I send the array it causes this error:

Cannot convert object of type 'System.String' to type'System.Collections.Generic.List1[System.String]'

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);
    }
});

This is the C# Code

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

You need to make your data parameter of the $.ajax call like this: JSON.stringify({'a': variables})

The JSON variable is not available in < IE8 so you'll want to include a JSON implementation like the one mentioned in the answer here

Also, you had an extra } in the success function.

So, in the future, if you want to add extra parameters to your data object passed to the web service, you'd construct it like so:

var someArr = ['el1', 'el2'];

JSON.stringify({ 
  'param1': 1,
  'param2': 'two'
  'param3': someArr
  // etc
});

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: JSON.stringify({'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;
}

data: Data to be sent to the server. It is converted to a query string, if not already a string. It's appended to the url for GET-requests. See processData option to prevent this automatic processing. Object must be Key/Value pairs. If value is an Array, jQuery serializes multiple values with same key based on the value of the traditional setting.

So, try to add a new parameter to your ajax call:

$.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);
    }
});

Try this way. Maybe you'll need to change the Web service method to expect an array instead of a List , but I'm not sure.

试试这个

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM