#asp.net #wcf #json #scriptmanager
#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'». Тем не менее, точка останова в первой строке веб-метода не активирована.
<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. кстати, код состояния, возвращаемый службой wcf, равен 400
Ответ №1:
У меня были похожие проблемы при работе с MVC. Я думаю.Десериализатор NET фактически ожидает, что передаваемый объект будет объектом JSON, а не массивом (т. Е. он всегда должен начинаться с «{» и заканчиваться на «}». Вы могли бы:
- Создайте класс POCO, который будет действовать как ваш DTO, который просто содержит список / массив элементов календаря внутри него, или
- Используйте более «мягкий» десериализатор, такой как Newtonsoft JSON.NET
Конечно, этот второй вариант будет работать, только если вы сможете каким-то образом убедить WCF запустить метод в первую очередь. Однако, еще раз взглянув на ваш код, я задаюсь вопросом, может ли ваше объявление _jsonImages в виде двойного массива строк вызвать некоторые трудности.
Комментарии:
1. 1, потому что JSON.NET помогло мне решить подобные проблемы раньше.
2. Сначала я попытался объявить _jsonImages как строку, отличную от массива. Ни одно из этих решений не работает, я также попытался добавить «{» и закончить на «}, но это не возымело никакого эффекта.
3. Я добавляю попытку отправки одного объекта вместо массива объектов, и это работает.