2013-09-29 3 views
0

У меня возникло множество проблем с проблемой в течение нескольких дней, и я очень расстраиваюсь! Я хотел бы знать, как декодировать массив JSON в VB.NET 4.5 Framework. Я пытаюсь использовать класс deserialize/serialize. Вот это массив:Декодирование сложное JSON Array vb.net

{ "LaunchIDs": [ "2", "3", "4", "5", "6", "7", "8", "9", "10"], "FavoriteID": нулевой, "Имя пользователя": "Тест", "ошибка": 0, "сообщение": "Вы успешно вошли в систему"}

код для массива

Public Class JSONCode 
    Public LaunchIDs As Integer 
    Public FavoriteIDAs Integer 
    Public username As String 
    Public [error] As Integer 
    Public message As Integer 
End Class 

Вот как я использую его внутри приложения.

Dim client As New WebClient() 
Dim jsonResponse As String = "{""LaunchIDs"":[""2"",""3"",""4"",""5"",""6"",""7"",""8"",""9"",""10""],""FavoriteID"":null,""username"":""Test"",""error"":0,""message"":""You have successfully logged in""}") 
Dim serializer As New JavaScriptSerializer() 
Dim response As JSONCode = serializer.Deserialize(Of JSONCode)(jsonResponse) 
     code = response.error 
     If code = 0 & response.message = "You have successfully logged in" Then 
      LoginFunction = True 
      botids = response.botids 
      ListBox1.AddItem(botids) 
     Else 
      Alert(Style.Critical, response.message) 
     End If 
End If 

Массив будет извлечена из веб-адреса (После того, как исправить эту проблему), поэтому его любопытное грязный прямо сейчас. Alert() - это всего лишь небольшая пользовательская функция msgBox.

Я получаю эту ошибку при попытке и отладке. Тип «System.Int32» не поддерживается для десериализации массива.

ответ

0

Ваше объявление класса неправильно оно должно быть

Public Class JSONCode_cor 
    Public LaunchIDs As Integer() 
    Public FavoriteID As Integer() 
    Public username As String 
    Public [error] As Integer 
    Public message As String 
End Class 

Это я использую в коде:

Dim jsonResponse As String = "{""LaunchIDs"":[""2"",""3"",""4"",""5"",""6"",""7"",""8"",""9"",""10""],""FavoriteID"":null,""username"":""Test"",""error"":0,""message"":""You have successfully logged in""}" 
Dim serializer As New Web.Script.Serialization.JavaScriptSerializer() 
Dim response As Object = serializer.Deserialize(Of JSONCode_cor)(jsonResponse) 

И это работает. Ваша проблема заключается в том, что вы объявляете LaunchIDs, как Integer, но в действительности это массив Integer()

+0

frmMain.FlatListBox2.AddItem (LaunchIDs) Это дало значение «int32» или что-то, поэтому я попытался переключения AddItem с AddRange. Теперь я получаю Ошибка 1 Значение типа «1-мерный массив Integer» не может быть преобразовано в «1-мерный массив объекта», потому что «Integer» не является ссылочным типом. – user2827489

+0

@ user2827489 См. Обновленный ответ. – IvanH

+0

Это код, который я уже использую. Ну, я понял, проблема, должен был сделать функцию, чтобы преобразовать Integer в массив String. – user2827489

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