I have the following simplified JSON string from a provider, its been a long time since I used Visual Studio and vb.Net, so I'm very rusty!
{
"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" }
}
}I want to use JSON.Net to turn this in to something I can work with, I have read examples etc and JSON.net looks like the answer, but I'm getting no where.
My .Net code (Me.TextBox1.Text contains the JSON shown above)
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 ClassCan someone explain why obj.ID always ends up as 0 please, and why none of the other properties of my class are populated and what I need to do to fix this, no errors are reported.
3 Answers
Your class JSON_result does not match your JSON string. Note how the object JSON_result is going to represent is wrapped in another property named "Venue".
So either create a class for that, e.g.:
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...)or change your JSON string to
{ "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" }
}or use e.g. a ContractResolver to parse the JSON string.
Imports Newtonsoft.Json.Linq
Dim json As JObject = JObject.Parse(Me.TextBox1.Text)
MsgBox(json.SelectToken("Venue").SelectToken("ID")) 0 In Place of using this
MsgBox(json.SelectToken("Venue").SelectToken("ID"))You can also use
MsgBox(json.SelectToken("Venue.ID"))