2013-12-17 19 views
5

JSON StringをVB.netオブジェクトに変換して、JSON Stringのデータに簡単にアクセスしようとしています。JSON StringをVB.netオブジェクトに逆シリアル化する

私のJSON文字列は次のようになります。

Public Class Rootobject 
    Private _data1 As String 

    Public Property status As String 
    Public Property count As Integer 
    Public Property data() As Datum 
End Class 

Public Class Datum 
    Public Property clan_id As Integer? 
    Public Property nickname As String 
    Public Property id As Integer 
End Class 

{ 
    "status": "ok", 
    "count": 4, 
    "data": [ 
    { 
     "clan_id": 500002846, 
     "nickname": "Azrael", 
     "id": 500429872 
    }, 
    { 
     "clan_id": null, 
     "nickname": "Azrael0", 
     "id": 500913252 
    }, 
    { 
     "clan_id": 500028112, 
     "nickname": "Azrael0313", 
     "id": 504109422 
    }, 
    { 
     "clan_id": null, 
     "nickname": "Azrael7", 
     "id": 501594186 
    } 
    ] 
} 

今、私は

私のクラス定義があるVB.netオブジェクトにこの文字列をデシリアライズしようとしていますJSON String用にVisual Studio 2012が自動的に作成されます。

私は.JSONデシリアライザをデシリアライズしてみました:

Dim Testobject As Rootobject _ 
= Global.Newtonsoft.Json.JsonConvert.DeserializeObject(Of Rootobject)(JSON_String) 

とJavaScriptSerializerで:

Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer() 
Dim Testobject_2 As Rootobject = serializer.Deserialize(Of Rootobject)(JSON_String) 

しかし、両方のケースで、私はちょうど「ステータス」と「カウント」へのアクセス権を取得することができています「データ」配列には適用されません。

は、私は、Visual Basicに新しいので、私はこの種の問題でJSONおよびデシリアライザや他の人々について多くを読んで、ほとんどのソリューションは、C#のためではなく任意のアイデア

VB.net

のためであるかIそれは間違っていたかも

+0

は( 'パブリック・プロパティデータをしようとしました):

Public Property data As Datum() 

それとも、これも動作します。これに

Public Property data() As Datum 

:あなたのRootobjectクラスでは、この行を変更 現在のJSONオブジェクト(たとえば、{"name": "value"})を「System.Collec」タイプにデシリアライズできません型はJSON配列を必要とするため、一般的です.IList'1 [WoT_Tool.WoT_Tool + Datum] ' [1,2,3])正しくデシリアライズします。 このエラーを修正するには、JSONをJSON配列(たとえば[1,2,3])に変更するか、 – Azrael

答えて

1

私はJsonToCSharpを使用してJSONを変換...そしてvb.netにC#の変換...

Public Class Datum 
    Public Property clan_id() As System.Nullable(Of Integer) 
     Get 
      Return m_clan_id 
     End Get 
     Set 
      m_clan_id = Value 
     End Set 
    End Property 
    Private m_clan_id As System.Nullable(Of Integer) 
    Public Property nickname() As String 
     Get 
      Return m_nickname 
     End Get 
     Set 
      m_nickname = Value 
     End Set 
    End Property 
    Private m_nickname As String 
    Public Property id() As Integer 
     Get 
      Return m_id 
     End Get 
     Set 
      m_id = Value 
     End Set 
    End Property 
    Private m_id As Integer 
End Class 

Public Class RootObject 
    Public Property status() As String 
     Get 
      Return m_status 
     End Get 
     Set 
      m_status = Value 
     End Set 
    End Property 
    Private m_status As String 
    Public Property count() As Integer 
     Get 
      Return m_count 
     End Get 
     Set 
      m_count = Value 
     End Set 
    End Property 
    Private m_count As Integer 
    Public Property data() As List(Of Datum) 
     Get 
      Return m_data 
     End Get 
     Set 
      m_data = Value 
     End Set 
    End Property 
    Private m_data As List(Of Datum) 
End Class 

これらのクラスを試してみてください。

+0

JSON.netシリアライザでは機能しませんが、JavascriptSerializerを使用します。 しかし、リストにはデータがなく、空であると言われています。 – Azrael

0

あなたは近くです。カッコは間違った場所にあります。うち(IListのとおり

Public Property data As List(Of Datum) 
関連する問題