отправка массива Json не удалась - PullRequest
1 голос
/ 05 мая 2011

Я создаю приложение 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 »».Тем не менее, точка останова в первой строке веб-метода не активирована.

    <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 Ответ

1 голос
/ 05 мая 2011

У меня были похожие проблемы с MVC.Я думаю, что десериализатор .NET действительно ожидает, что передаваемый объект будет JSON object , а не array (то есть он всегда должен начинаться с "{" и заканчиваться на "}"Вы можете:

  1. Создать класс POCO, который будет действовать как ваш DTO, в котором просто есть List / Array of CalenderItems, или
  2. Использовать более «мягкий» десериализатор, такой какJSON.NET от Newtonsoft

Конечно, этот второй вариант будет работать только в том случае, если вы сможете как-то убедить WCF запустить метод в первую очередь. Однако, глядя на ваш код еще раз, мне интересно,объявление _jsonImages как двойной массив строк может вызывать некоторые трудности.

...