2011-05-05 69 views
1

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

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 

任何想法?

+0

btw wcf服务返回的状态代码是400 – cja100 2011-05-06 10:50:54

回答

1

我有过使用MVC的类似问题。我认为.NET的解串器实际上是希望它传递的对象将是一个JSON 对象而不是阵列(即它应该总是以“{”和结束“}”,你可以:

  1. 创建一个POCO类作为您的DTO它只是有这里面CalenderItems的列表/阵列,或
  2. 用更“宽松”解串器像Newtonsoft的JSON.NET

当然,这第二个选项只会在你能以某种方式说服WCF运行我时起作用首先就是这样。然而,再次查看你的代码,我想知道如果你声明_jsonImages作为字符串的双数组可能会造成一些困难。

+0

+1,因为JSON.NET帮助我解决了以前这样的问题。 – 2011-05-05 14:44:08

+0

我第一次尝试将_jsonImages声明为非数组字符串。这两个解决方案都没有工作,我也尝试添加“{”,并以“}结束,它没有任何效果。 – cja100 2011-05-06 10:08:14

+0

我添加尝试发送一个对象,而不是一个对象数组,它的工作原理。 – cja100 2011-05-06 10:08:54