2014-02-10 10 views
15

Ich habe die folgende vereinfachte JSON-Zeichenfolge von einem Anbieter, es ist eine lange Zeit seit ich Visual Studio und vb.Net verwendet habe, so dass ich sehr rostig bin!Einfaches Arbeitsbeispiel von json.net in VB.net

{ 
"Venue": { 
    "ID": 3145, 
    "Name": "Big Venue, Clapton", 
    "NameWithTown": "Big Venue, Clapton, London", 
    "NameWithDestination": "Big Venue, Clapton, London", 
    "ListingType": "A", 
    "Address": { 
     "Address1": "Clapton Raod", 
     "Address2": "", 
     "Town": "Clapton", 
     "County": "Greater London", 
     "Postcode": "PO1 1ST", 
     "Country": "United Kingdom", 
     "Region": "Europe" 
    }, 
    "ResponseStatus": { 
     "ErrorCode": "200", 
     "Message": "OK" 
    } 
} 
} 

Ich möchte JSON.Net verwenden, um dies etwas zu drehen ich arbeiten kann, habe ich Beispiele etc gelesen und JSON.net sieht aus wie die Antwort, aber ich bin immer nicht, wo.

Meine .Net-Code (Me.TextBox1.Text enthält die JSON oben gezeigt)

Imports Newtonsoft.Json 

Public Class Form1 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim obj As JSON_result 
    obj = JsonConvert.DeserializeObject(Of JSON_result)(Me.TextBox1.Text) 

    MsgBox(obj.ID) 
End Sub 
End Class 

Public Class JSON_result 
    Public ID As Integer 
    Public Name As String 
    Public NameWithTown As String 
    Public NameWithDestination As String 
    Public ListingType As String 
End Class 

Kann jemand erklären, warum obj.ID immer als 0 landet bitte, und warum keiner der anderen Eigenschaften meiner Klasse sind ausgefüllt und was ich tun muss, um dies zu beheben, werden keine Fehler gemeldet.

Antwort

23

Ihre Klasse JSON_result stimmt nicht mit Ihrer JSON-Zeichenfolge überein. Beachten Sie, dass das Objekt, das JSON_result darstellen soll, in eine andere Eigenschaft mit dem Namen "Venue"10 eingebettet ist.

erstellen Also entweder eine Klasse für das, z.B .:

Public Class Container 
    Public Venue As JSON_result 
End Class 

Public Class JSON_result 
    Public ID As Integer 
    Public Name As String 
    Public NameWithTown As String 
    Public NameWithDestination As String 
    Public ListingType As String 
End Class 

Dim obj = JsonConvert.DeserializeObject(Of Container)(...your_json...) 

oder Ihre JSON-String ändern

{ 
    "ID": 3145, 
    "Name": "Big Venue, Clapton", 
    "NameWithTown": "Big Venue, Clapton, London", 
    "NameWithDestination": "Big Venue, Clapton, London", 
    "ListingType": "A", 
    "Address": { 
     "Address1": "Clapton Raod", 
     "Address2": "", 
     "Town": "Clapton", 
     "County": "Greater London", 
     "Postcode": "PO1 1ST", 
     "Country": "United Kingdom", 
     "Region": "Europe" 
    }, 
    "ResponseStatus": { 
     "ErrorCode": "200", 
     "Message": "OK" 
    } 
} 

oder verwenden Sie zum Beispiel a ContractResolver, um die JSON-Zeichenfolge zu analysieren.

+7

Ich benutze diese Seite http://jsonutils.com/, um automatisch Klassen für JSON-Strings zu erstellen, um die Dinge etwas zu beschleunigen. Ich dachte, ich würde es für andere erwähnen. – mikro

+0

Es gibt auch eine VS-Plug-in von Microsoft IIRC in einigen ASP.Net-Tool-Paket, aber ich habe den Namen vergessen ... – sloth

+0

@mikro, Vielen Dank für den Link. Das wird sehr nützlich sein. DANKE! –

14
Imports Newtonsoft.Json.Linq 

Dim json As JObject = JObject.Parse(Me.TextBox1.Text) 
MsgBox(json.SelectToken("Venue").SelectToken("ID")) 
+0

Vielen Dank. –

Verwandte Themen