2016-12-06 1 views
0

でこのJSONをデシリアライズ私はこの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のアイテムがあります。 jsonはKeyValuePairsに解析されます。

私はコード

Dim data = myjss.DeserializeObject(steamData) 

のこの部分を使用して、データ要素の各ループのために実行した場合、デバッグ時に、私はデータの内容を見ることができますが、私はで動作する方法がわかりませんKeyValuePairsの配列を含んでいる可能性があるKeyValuePairsに変換する際に問題が生じているオブジェクトなので、それらはそうです。

私が得ようとしているのは、solo_competitive_rank、competitive_rank、およびsteamidの値ですが、すべてのコンテンツをデシリアライズできない場合は、それを行うことはできません。

宣言されたクラスは間違っていますか?

+0

*その*のJSONはただ一つのアイテムを持っていない - 何の '[...] 'が - 。。そう(の)リストや配列にデシリアライズいけないクラスはsupoptimalですが、動作します見てデータでは - steadmidの場合はデータが引用されているので、それは文字列です。チーズなどは整数ではありませんので、これが大量であればJSON.NET – Plutonix

+0

を使用することもできます(null)を値の型に変換できません。} \t System.InvalidOperationException また、プロパティの型を適切な型に編集しました(いくつかのint型、 doubleとdatetime) – Legjendat

+0

*正確なデータ?nullは唯一の名前です。文字列に変換できます。 – Plutonix

答えて

0

しかし、このソリューションではRootObjectクラスを使用しません。 最初の方法では、JSONはkeyとvalueを持つリストに必要です。 これはJSON配列専用です。 :(

RG