将int数组传递给webservice

时间:2011-09-11 14:48:25

标签: c# jquery web-services asmx

我对.NET Web服务进行了$.ajax调用,后者又将DAL中的函数用于实体框架。我认为这会有效,但问题在于传递艺术家ID的数组。我尝试过从字符串数组到int数组的各种疯狂转换,我使用了Linq .Select,但没有一个能够工作。我总是得到Cannot convert object of type System.String to type System.Int32[]或类似的。我理解错误,我只是不知道如何解决它。

这是我的jQuery:

                var params = new Array();
                $('ul li img.selected').each(function (index) {
                    params.push($(this).attr('id'));
                });

                var d = $('#calendar').fullCalendar('getDate').format();

                var parameters = {
                    sessionHash: 'xxx',
                    start: d,
                    end: d,
                    artists: JSON.stringify(params)
                };

                $.ajax({
                    type: "POST",
                    url: "/ws.asmx/GetDatesForArrayOfArtists",
                    data: JSON.stringify(parameters),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: (function Success(data, status) {
                        alert('hazzah!');
                    }),
                    error: (function Error(request, status, error) {
                        alert('poo botty bum smells');
                    })
                });

这是我的网络服务:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<Calendar> GetDatesForArrayOfArtists(string sessionHash, DateTime start, DateTime end, int[] artists)
        {
            var u = UserObject.GetCurrentUser(sessionHash);

            //var ints = artists.Select(x => int.Parse(x.ToString())).ToArray();

            return CalendarObject.GetDates(u.ClientId, start, end, artists);
        }

我已经留下了一些已注释掉的代码,这样人们就可以看到我在修复此问题时的蹩脚尝试。所以,基本问题是,鉴于上面的代码,我如何将整数数组传递给Web服务?

编辑1:以下是浏览器控制台的两个屏幕截图,这可能是解释问题的方法:

post response

3 个答案:

答案 0 :(得分:2)

在跟踪artists中是字符串数组 - [["4","5"]]。我认为它应该[4,5]起作用。

考虑更改将parseInt添加到params.push($(this).attr('id'));并删除JSON.stringify

答案 1 :(得分:1)

如果不知道您遇到的问题的行号等,也许这可能会有所帮助:

如果不能,请更新您的问题,确切地说代码失败的地方(哪条线和/或方法)。

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<Calendar> GetDatesForArrayOfArtists(string sessionHash, 
                          DateTime start, 
                          DateTime end, 
                          string[] artists)
    {
        var u = UserObject.GetCurrentUser(sessionHash);

        return CalendarObject.GetDates(u.ClientId, 
                   start, 
                   end, 
                   artists.Select(artist => Integer.Parse(artist)).ToArray());
    }

答案 2 :(得分:0)

一个简单的方法是:

在javascript中构建一个新数组:

var myArray = new Array();
myArray.push([value1, value2, ...]);

在C#中,只需创建一个ICollection参数来获取矩阵:

[WebMethod(EnableSession = true)]
public void MyMethod GetMatrixFromJavascript(System.Collections.ICollection myArray) { 
    ...
}