2016-12-06 3 views
0

J'ai cette réponse JSON:Désérialise cette JSON dans 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" 
    } 
} 

l'aide d'un outil en ligne, j'ai créé ces classes:

<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 

Puis-je utiliser ce code pour désérialiser:

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

Mais le résultat que je reçois est rien, playerDictionary a 0 items, quand il devrait avoir 1 élément avec le contenu du json analysé dans KeyValuePairs.

Si j'utilise ce morceau de code

Dim data = myjss.DeserializeObject(steamData) 

puis exécutez une pour chaque boucle sur les éléments de données, je peux voir le contenu des données lors de débogage, mais je ne sais pas comment travailler avec comme ça, car ce ne sont que des objets que j'ai du mal à convertir en KeyValuePairs, qui en eux-mêmes peuvent contenir des tableaux de KeyValuePairs. Ce que j'essaie d'obtenir, ce sont les valeurs de solo_competitive_rank, competitive_rank et steamid, mais si je n'arrive pas à désérialiser tout le contenu, je ne peux pas le faire.

Les classes déclarées sont-elles erronées?

+0

* Ce * JSON a un seul élément - pas '[...]' il -.. Alors ne désérialiser à une liste (de) ou d'un tableau Les classes sont supoptimal mais travailleront Regardez à la donnée - pour 'steadmid' les données sont citées donc c'est une chaîne.' cheese' et les autres ne l'est pas, donc ça devrait être un entier.Si vous en faites beaucoup, vous pouvez utiliser JSON.NET – Plutonix

+0

ok , supprimant la liste (de), me donne une autre erreur qui est l'exception \t {"Impossible de convertir null à un type de valeur."} \t System.InvalidOperationException En outre, j'ai modifié les types de propriété à leurs propres, (certains ents, double et un datetime) – Legjendat

+0

Avec * cette * donnée exacte? peut être converti en chaîne. – Plutonix

Répondre

0

mais avec cette solution, vous n'utilisez pas la classe RootObject. Avec la première méthode, votre JSON veut dans la liste avec la clé et la valeur. Ceci est uniquement pour JSON Array. :(

rg