Проблема десериализации JSON: список (элементов) в VB.NET
Привет.
У меня есть еще одна проблема десериализации JSON, и она меня расстраивает. У меня была предыдущая проблема десериализации (Как десериализовать "многоуровневый" JSON в VB.NET?[^]), и это было быстро решено. Но я последовал инструкциям, чтобы повторить это с еще одной строкой JSON, и она выдает ту же ошибку. Вот код, который я пытаюсь десериализовать:
{"timestamp":1470270507172,"profileId":"e7cc8ec97b294d2484843d330f136bbd","profileName":"iProgramIt","textures":{"SKIN":{"url":"http://textures.minecraft.net/texture/f7f6f0e6a2a3d6db69a4afa9fef28ea4d56f37199277f95c1d2b5f0aaa4e2"}}}
Он застревает на коже.
Вот мой код в VB.NET.
Public Class SKIN Public Property url As List(Of String) End Class Public Class CAPE Public Property url As List(Of String) End Class 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 List(Of PropertyX) End Class Public Class Textures Public Property SKIN As List(Of SKIN) Public Property CAPE As List(Of CAPE) End Class Public Class Skins Public Property timestamp As String Public Property profileId As String Public Property profileName As String Public Property isPublic As String Public Property textures As List(Of Textures) End Class Public Function GETX(ByVal Str As String) As String Dim wc As New System.Net.WebClient Return wc.DownloadString(Str) End Function
Десериализация (где возникает ошибка):
Dim SkinsBase As String = GETX("https://sessionserver.mojang.com/session/minecraft/profile/" & obj.id) Dim xObj = JsonConvert.DeserializeObject(Of Skins_Base)(SkinsBase) Dim b As Byte() = Convert.FromBase64String(xObj.properties(0).value) Dim bString As String = System.Text.Encoding.UTF8.GetString(b) Dim b64 = JsonConvert.DeserializeObject(Of Skins)(bString) MsgBox(b64.textures(0).SKIN(0).url(0))
Заранее спасибо.
-ипрограммировать
Что я уже пробовал:
http://www.codeproject.com/Questions/1116304/How-do-I-deserialise-multi-level-JSON-in-VB-NET. Теперь этот вопрос не решился. Погуглил и ничего не соответствует этому обстоятельству.
Afzaal Ahmad Zeeshan
Потому что ничто не будет соответствовать вашим потребностям. В JSON, { }
имею в виду объект. Ваш документ JSON основан на объекте, { "timestamp": 1470270507172, ... }
Чтобы десериализовать объект, вам нужно десериализовать его в объект, а не в массив объектов. Во-вторых, ваш JSON и объекты не похожи. Их очень трудно отследить, и библиотека не сможет сама понять, как сопоставить, какой из них с каким. Прочтите эту мою статью, чтобы узнать больше об этом, От нуля до героя в JSON с C#.
iProgramIt
Что бы вы посоветовали мне сделать-то есть исправить это?
Afzaal Ahmad Zeeshan
Пожалуйста, прочтите мою статью, в ней есть руководство. Проблема в том, что ваш тип не может быть сопоставлен из-за несоответствия имен.
Измените их имена в JSON, если вы не можете изменить схему JSON, то, пожалуйста, измените определение вашего типа.
iProgramIt
Я не могу изменить имена. Но [простите меня за то, что я нуб], как мне изменить определение типа? Можете ли вы указать мне, какие из них изменить и т. д.?
Afzaal Ahmad Zeeshan
Измените имена свойств вашего типа Skins_Base.
iProgramIt
Для меня это ничего не значит. Есть еще предложения? На самом деле я получаю новую ошибку. Поскольку имена свойств Skin_Base должны быть такими, и я не могу их заменить, Newtonsoft.Json не распознает "пользовательские" имена. Все равно спасибо.