2016-12-06 8 views
0

У меня есть этот JSon ответ:Deserialize этот JSON в VB.NET

{ 

    "tracked_until": "1483704963", 
    "solo_competitive_rank": "4066", 
    "competitive_rank": "3821", 
    "mmr_estimate": { 
     "estimate": 3971, 
     "stdDev": 215.26495302301302, 
     "n": 20 
    }, 
    "profile": { 
     "account_id": 131505839, 
     "personaname": "LeG", 
     "name": null, 
     "cheese": 1, 
     "steamid": "76561198091771567", 
     "avatar": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/c0/c09ca9b316ff7bf7dccba6f5a32aba97b8dba05c.jpg", 
     "avatarmedium": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/c0/c09ca9b316ff7bf7dccba6f5a32aba97b8dba05c_medium.jpg", 
     "avatarfull": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/c0/c09ca9b316ff7bf7dccba6f5a32aba97b8dba05c_full.jpg", 
     "profileurl": "http://steamcommunity.com/id/LegLabs/", 
     "last_login": "2016-11-11T13:13:18.651Z", 
     "loccountrycode": "AL" 
    } 
} 

с помощью онлайн-инструмент, я создал эти классы:

<Serializable> 
    Public Class mmr_estimate 
     Public Property estimate As String 
     Public Property stdDev As String 
     Public Property n As String 
    End Class 

    <Serializable> 
    Public Class profile 
     Public Property account_id As String 
     Public Property personaname As String 
     Public Property name As String 
     Public Property cheese As String 
     Public Property steamid As String 
     Public Property avatar As String 
     Public Property avatarmedium As String 
     Public Property avatarfull As String 
     Public Property profileurl As String 
     Public Property last_login As String 
     Public Property loccountrycode As String 
    End Class 

    <Serializable> 
    Public Class RootObject 
     Public Property tracked_until As String 
     Public Property solo_competitive_rank As String 
     Public Property competitive_rank As String 
     Public Property mmr_estimate As mmr_estimate 
     Public Property profile As profile 
    End Class 

Затем я использую этот код для десериализации его:

Dim steamData As String = ' the json contents above 
Dim myjss As New JavaScriptSerializer() 
Dim playerDictionary = myjss.Deserialize(Of List(Of RootObject))(steamData) 

Но результат, который я получаю, ничего, playerDictionary имеет 0 элементов, когда он должен иметь 1 элемент с содержимым json разобрался в KeyValuePairs.

Если я использую этот кусок кода

Dim data = myjss.DeserializeObject(steamData) 

, а затем запустить для каждого цикла по элементам данных, я могу видеть содержимое данных при отладке, но я не знаю, как работать с они такие, потому что это просто объекты, с которыми у меня возникают проблемы с преобразованием в KeyValuePairs, которые сами по себе могут содержать массивы KeyValuePairs.

То, что я пытаюсь получить, это ценности solo_competitive_rank, compet_rank и steamid, но если я не могу получить все содержимое десериализованным, я не могу этого сделать.

Являются ли объявленные классы неправильными?

+0

* Это * JSON не имеет только один пункт - не '[...]' там -.. Так что не десериализации в список (из) или массива Классы supoptimal, но будет работать Смотри на данных - для 'steadmid' данные цитируются так, что это строка.' cheese' и другие нет, поэтому он должен быть целым. Если вы это сделаете, вы можете использовать JSON.NET – Plutonix

+0

ok , удаляя List (of), дает мне еще одну ошибку, которая является исключением \t {«Невозможно преобразовать значение null в тип значения».} \t System.InvalidOperationException Кроме того, я редактировал типы свойств для своих собственных (некоторые ints, удваивает и datetime). – Legjendat

+0

С *, что * точные данные? Единственный нуль - это имя, которое могут быть преобразованы в строку. – Plutonix

ответ

0

но с этим решением вы не используете класс RootObject. С помощью первого метода ваш JSON хочет в списке с ключом и значением. Это только для JSON Array. :(

гк