2013-12-17 3 views
5

Ich versuche, eine JSON-Zeichenfolge in ein VB.net-Objekt zu konvertieren, um einfachen Zugriff auf alle Daten in der JSON-Zeichenfolge zu erhalten.Deserialisieren von JSON-String zu VB.net-Objekt

Meine JSON String sieht wie folgt aus:

{ 
    "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 
    } 
    ] 
} 

Jetzt versuche ich, diesen String in eine VB.net Objekt deserialisiert

Meine Klassendefinitionen sind:

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 

die Visual Studio 2012 wird automatisch für meine JSON-Zeichenfolge erstellt.

habe ich versucht, mit JSON Deserializer deserialisieren:

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

und mit JavaScriptSerializer:

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

Aber in beiden Fällen bin ich nur in der Lage zu erhalten Zugang zu "Status" und "count" aber nicht zu dem "Daten" -Array.

Ich bin neu in Visual Basic, so las ich viel über JSON und Deserializer und andere Menschen mit dieser Art von Problemen, aber die meisten Lösungen sind für C# und nicht für VB.net

Alle Ideen, was ich könnte falsch gemacht haben?

+0

Versuchte 'Public Property Daten() As IList (Of Datum) ' Dann heißt es: Das aktuelle JSON-Objekt (zB {" name ":" value "}) kann nicht in Typ 'System.Collec' deserialisiert werden ignitions.Generic.IList'1 [WoT_Tool.WoT_Tool + Datum] 'weil der Typ ein JSON-Array benötigt (z.B. [1,2,3]) um korrekt zu deserialisieren. Um diesen Fehler zu beheben, ändern Sie entweder den JSON in ein JSON-Array (z. B. [1,2,3]) – Azrael

Antwort

1

konvertiert ich Ihre JSON JsonToCSharp mit ... und konvertiert dann die C# vb.net ...

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 

diese Klassen versuchen.

+0

Mit dem JSON.net-Serializer funktioniert es nicht, aber mit dem JavascriptSerializer ist es. Aber dann heißt es, dass es keine Daten in der Liste gibt und dass es leer ist. – Azrael

0

Sie sind nah dran; Sie haben Ihre Klammern an der falschen Stelle. In Ihrer Rootobject Klasse, ändern Sie diese Zeile:

Public Property data() As Datum 

dazu:

Public Property data As Datum() 

Oder wird dies auch funktionieren:

Public Property data As List(Of Datum) 
Verwandte Themen