2011-05-05 66 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