iProgramIt Ответов: 1

Как десериализовать "многоуровневый" JSON в VB.NET?


Всем привет,
Я пытаюсь десериализовать некоторые JSON в Visual Basic.
Однако у меня возникли некоторые проблемы. Я использую Newtonsoft. Json.
Но я, кажется, продолжаю получать эту ошибку, когда пытаюсь десериализовать какой-то JSON:
Текст JSON:
{"id":"e7cc8ec97b294d2484843d330f136bbd","name":"iProgramIt","properties":[{"name":"textures","value":"eyJ0aW1lc3RhbXAiOjE0NzAyMDkwOTIzNzQsInByb2ZpbGVJZCI6ImU3Y2M4ZWM5N2IyOTRkMjQ4NDg0M2QzMzBmMTM2YmJkIiwicHJvZmlsZU5hbWUiOiJpUHJvZ3JhbUl0IiwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2Y3ZjZmMGU2YTJhM2Q2ZGI2OWE0YWZhOWZlZjI4ZWE0ZDU2ZjM3MTk5Mjc3Zjk1YzFkMmI1ZjBhYWE0ZTIifX19"}]}


Ошибка, когда я пытаюсь десериализовать его:
Newtonsoft.Json.JsonSerializationException was unhandled
  HResult=-2146233088
  Message=Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'Minecraft_Report_Generator.Form1+PropertyX' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.


Ниже приведен мой код:
Public Class PropertyX
        Public Property name As String
        Public Property value As String
        Public Property signature As String
    End Class

    Public Class Skins_Base
        Public Property id As String
        Public Property name As String
        Public Property properties As PropertyX
    End Class

    Public Class UUID_basic
        Public Property id As String
        Public Property name As String
        Public Property legacy As Boolean
        Public Property demo As Boolean
    End Class

Dim retrieveString As String = GETX(Basic_USER & TextBox1.Text)
        Dim obj = JsonConvert.DeserializeObject(Of UUID_basic)(retrieveString)
        Dim SkinsBase As String = GETX("https://sessionserver.mojang.com/session/minecraft/profile/" & obj.id)
        Dim xObj = JsonConvert.DeserializeObject(Of Skins_Base)(SkinsBase)


Последняя строка этого кода-это та, которая ошибочна. Кроме того, я извлек из своего кода биты и фрагменты, относящиеся к этому обстоятельству, поэтому я понимаю, что вы не можете вызывать функции и т. д. из класса.

Заранее спасибо,
-ипрограммировать

Что я уже пробовал:

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

1 Ответов

Рейтинг:
9

F-ES Sitecore

В JSON "свойства" - это массив (квадратные скобки указывают на массив), даже если в массиве есть только один элемент. Таким образом, ваше поле свойств должно быть списком свойств PropertyX. Не знаю vb.net я боюсь, но я считаю, что это что-то вроде "как список свойств", а не просто "как свойство"


iProgramIt

Ты самый лучший! Спасибо! Кстати, если вам не все равно, это "As List(of PropertyX)". Еще раз спасибо!