发送Json数组失败

时间:2011-05-05 14:36:57

标签: asp.net wcf json scriptmanager

我正在构建一个JSON / WCF应用程序,需要将一组对象发送回服务器。由于某种原因,它不接受阵列。使用脚本管理器,我可以很好地获取数据。

  var month = $("#ddlStartMonth").val();
            var year = $("#ddlStartYear").val();
            var items = JSON.stringify(calendarItems);
            WebService.SaveCalendar(items, new Date(year, month, 01).toDateString(), new Date(year, month, 01).toDateString(), Submit, onPageError);

我尝试过使用和不使用JSON stringify。 onPageError函数被激活,它产生的唯一错误信息是“服务器方法'SaveCalendar'失败”。然而,Web方法第一行的断点未激活。

    <OperationContract()>
<WebGet(ResponseFormat:=WebMessageFormat.Json, BodyStyle:=WebMessageBodyStyle.WrappedRequest)>
<WebMethod(EnableSession:=True)>
    Public Function SaveCalendar(ByVal _jsonImages As String()(), ByVal _selectedMonth As String, ByVal _selectedYear As String) As Boolean
        Dim _calenderItems As New List(Of CalenderItem)
        '_calenderItems = New JavaScriptSerializer().Deserialize(Of List(Of CalenderItem))(_jsonImages)
        HttpContext.Current.Session("calenderItems") = _calenderItems
        HttpContext.Current.Session("selectedMonth") = New Date(_selectedMonth)
        HttpContext.Current.Session("selectedYear") = New Date(_selectedYear)
        Return True
    End Function

任何想法?

1 个答案:

答案 0 :(得分:1)

我在使用MVC时遇到了类似的问题。我认为.NET的反序列化器实际上期望它传递的对象将是一个JSON 对象而不是数组(即它应始终以“{”开头并以“你可以:

  1. 创建一个POCO类作为你的DTO,里面只有一个CalenderItem列表/数组,或者
  2. 使用更像“宽松”的反序列化器,如Newtonsoft的JSON.NET
  3. 当然,第二个选项只有在你能够以某种方式说服WCF首先运行该方法时才有效。但是,再看一下你的代码,我想知道你将_jsonImages声明为双字符串数组可能会造成一些困难。