Stavros S.
Stavros S.

Reputation: 117

Deserialize Json object into a list?

Well i'm trying to deserialize a json file but no matter what i try i can't make it work, so i need some help with it.

So here's the json file:

{
  "38308613": [
    {
      "name": "Cassiopeia's Mercenaries",
      "tier": "GOLD",
      "queue": "RANKED_SOLO_5x5",
      "entries": [
        {
          "playerOrTeamId": "38308613",
          "playerOrTeamName": "TrashTheBrain",
          "division": "III",
          "leaguePoints": 75,
          "wins": 328,
          "losses": 321,
          "isHotStreak": false,
          "isVeteran": true,
          "isFreshBlood": false,
          "isInactive": false
        }
      ]
    },
    {
      "name": "Cho'Gath's Shadowdancers",
      "tier": "GOLD",
      "queue": "RANKED_TEAM_3x3",
      "entries": [
        {
          "playerOrTeamId": "TEAM-8bf3a360-77ba-11e4-9fc4-c81f66db96d8",
          "playerOrTeamName": "Ebal 9 vas",
          "division": "IV",
          "leaguePoints": 0,
          "wins": 22,
          "losses": 24,
          "isHotStreak": false,
          "isVeteran": false,
          "isFreshBlood": false,
          "isInactive": false
        }
      ]
    },
    {
      "name": "Elise's Deceivers",
      "tier": "BRONZE",
      "queue": "RANKED_TEAM_5x5",
      "entries": [
        {
          "playerOrTeamId": "TEAM-8bf3a360-77ba-11e4-9fc4-c81f66db96d8",
          "playerOrTeamName": "Ebal 9 vas",
          "division": "III",
          "leaguePoints": 66,
          "wins": 5,
          "losses": 6,
          "isHotStreak": false,
          "isVeteran": false,
          "isFreshBlood": false,
          "isInactive": false
        }
      ]
    },
    {
      "name": "Vayne's Snipers",
      "tier": "SILVER",
      "queue": "RANKED_TEAM_3x3",
      "entries": [
        {
          "playerOrTeamId": "TEAM-7da3b7b0-7bfa-11e5-a148-c81f66dd30e5",
          "playerOrTeamName": "MathMechPower",
          "division": "V",
          "leaguePoints": 75,
          "wins": 7,
          "losses": 6,
          "isHotStreak": false,
          "isVeteran": false,
          "isFreshBlood": false,
          "isInactive": false
        }
      ]
    }
  ],
  "65100402": [
    {
      "name": "Jarvan IV's Spellslingers",
      "tier": "GOLD",
      "queue": "RANKED_SOLO_5x5",
      "entries": [
        {
          "playerOrTeamId": "65100402",
          "playerOrTeamName": "Charlynnnn",
          "division": "I",
          "leaguePoints": 8,
          "wins": 447,
          "losses": 438,
          "isHotStreak": false,
          "isVeteran": true,
          "isFreshBlood": false,
          "isInactive": false
        }
      ]
    },
    {
      "name": "Darius's Warlocks",
      "tier": "SILVER",
      "queue": "RANKED_TEAM_3x3",
      "entries": [
        {
          "playerOrTeamId": "TEAM-f86481d0-6cf2-11e5-a39d-c81f66dd30e5",
          "playerOrTeamName": "YingYangWolves",
          "division": "II",
          "leaguePoints": 0,
          "wins": 4,
          "losses": 2,
          "isHotStreak": false,
          "isVeteran": false,
          "isFreshBlood": false,
          "isInactive": false
        }
      ]
    },
    {
      "name": "Morgana's Elementalists",
      "tier": "SILVER",
      "queue": "RANKED_TEAM_5x5",
      "entries": [
        {
          "playerOrTeamId": "TEAM-f86481d0-6cf2-11e5-a39d-c81f66dd30e5",
          "playerOrTeamName": "YingYangWolves",
          "division": "III",
          "leaguePoints": 0,
          "wins": 3,
          "losses": 3,
          "isHotStreak": false,
          "isVeteran": false,
          "isFreshBlood": false,
          "isInactive": false
        }
      ]
    }
  ]
}

65100402/38308613 property will be unique for each api call based on the ids passed on the webrequest (up to 10 properties). So my thought was to create a general class and deserialize the json reply into a list.

 Public Class Entry
    Public Property playerOrTeamId As String
    Public Property playerOrTeamName As String
    Public Property division As String
    Public Property leaguePoints As Integer
    Public Property wins As Integer
    Public Property losses As Integer
    Public Property isHotStreak As Boolean
    Public Property isVeteran As Boolean
    Public Property isFreshBlood As Boolean
    Public Property isInactive As Boolean
End Class

Public Class PlayerID
    Public Property name As String
    Public Property tier As String
    Public Property queue As String
    Public Property entries As Entry()
End Class

Public Class Example
    Public Property PlayerID As PlayerID()
End Class

I think that i'm ok until this point, right?

 Dim a As List(Of PlayerID) = JsonConvert.DeserializeObject(Of List(Of PlayerID))(json)
    MsgBox(a(1).name)

Anyone could point a way to deserialize it and loop through the properties? Thanks in advance!

Upvotes: 2

Views: 1655

Answers (1)

Remigius Stalder
Remigius Stalder

Reputation: 2170

The JSON is not a list; it is enclosed by {}, whereas a list would be enclosed by []. Therefore, you should deserialize it into an object type.

Upvotes: 1

Related Questions