Простой рабочий пример json.net в VB.net

У меня есть следующая упрощенная строка JSON от поставщика, ее было давно, так как я использовал Visual Studio и 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"
    }
}
}

Я хочу использовать JSON.Net, чтобы превратить это в то, с чем я могу работать, я прочитал примеры и т.д., и JSON.net выглядит как ответ, но я не получаю.

Мой .NET код (Me.TextBox1.Text содержит JSON, показанный выше)

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

Может кто-нибудь объяснить, почему obj.ID всегда заканчивается как 0, и почему ни одно из других свойств моего класса не заполнено, и что мне нужно сделать, чтобы исправить это, сообщения об ошибках не сообщаются.

Ответы

Ответ 1

Ваш класс JSON_result не соответствует вашей строке JSON. Обратите внимание, что объект JSON_result будет представлять собой завернутый в другое свойство с именем "Venue".

Итак, создайте для этого класс, например:

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...)

или измените строку JSON на

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

или использовать, например, a ContractResolver для разбора строки JSON.

Ответ 2

Imports Newtonsoft.Json.Linq

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