2015-08-18 4 views
1

Я использую VB.Net, MVC 5. Я создаю объект javaScript, а затем передаю этот объект моему контроллеру с помощью ajax и JSON.Как десериализовать объект JSON, содержащий два массива

Мой объект создается следующим образом:

var myEdits = { 
        arrayOfIDs: [], 
        arrayOfValues : [] 
       }; 

Это, как я отправить объект на сервер:

$.ajax({ 
       url: '/ViewDetails/EditConfirmation', 
       type: 'POST', 
       data: { 'myEdits': myEdits } 
      }) 
       .success(function (result) { 
        alert("success"); 
       }) 
       .error (function (status) { 
        alert(status); 
       }) 

Моя строка, когда она попадает на сервер выглядит следующим образом:

"{" arrayOfIDs ": [" 53 "," 54 "," 55 "," 56 "]," arrayOfValues ​​": [" foo "," bar "," narf "," woohoo "]}"

Я попытался создать класс вроде этого:

Function CompareEdits(myEdits As Object) As IEnumerable(Of compareEdits) 
     Dim serializer As New JavaScriptSerializer() 

     Dim model As compareEdits 
     model = serializer.Deserialize(Of compareEdits)(myEdits) 

     Return model 
    End Function 

End Class 

Public Class compareEdits 
    Public Property arrayOfIDs As List(Of String) 
    Public Property arrayOfValues As List(Of String) 
End Class 

Я также попытался десериализации это так:

Function CompareEdits(myEdits As Object) As IEnumerable(Of compareEdits) 
     Dim serializer As New JavaScriptSerializer() 

     Dim model 
     model = serializer.Deserialize(Of Array)(myEdits) 

     Return model 
    End Function 

Я получаю эту ошибку, когда я пытаюсь десериализации My JSON строка:

{ "Преобразование из типа 'String()' для типа 'строка' не является допустимым."}

Первый массив в строке используется для определения того, какое поле необходимо обновить, второй массив в строке - это фактическое значение.

Как правильно десериализовать эту строку?

+1

Первый, использующий тип 'compareEdits', отлично работает для меня, не ставьте jString в' Object'. Передайте его как '(myEdits As String'), сериализованный вывод - строка. Синус у вас есть 2 массива внутри класса, возвращаемый тип ('IEnumerable') кажется неправильным. – Plutonix

+0

@plutonix вы абсолютно правы – rogerdeuce

ответ

1

Ваша первая попытка в основном правильно:

' the serialized data is string, dont box it 
' the return is a Type containing the Lists/Arrays 
Function CompareEdits(myEdits As String) As compareEdits 
    Dim serializer As New JavaScriptSerializer() 

    Dim model = serializer.Deserialize(Of compareEdits)(myEdits) 

    Return model 
End Function 

Возвращение Тип определенно не так: вы десериализации к типу, который содержит 2 массивов/списков, так As IEnumerable Isnt права.

Я не уверен, почему вы получили ошибку или где я случайно набрал ее без этих двух аспектов, и она отлично работала. Указанная ошибка может быть вызвана вторым методом.

Смежные вопросы