web-dev-qa-db-fra.com

Exemple de travail simple de json.net en VB.net

J'ai la chaîne JSON simplifiée suivante d'un fournisseur, cela fait longtemps que je n'ai pas utilisé Visual Studio et vb.Net, je suis donc très rouillé!

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

Je veux utiliser JSON.Net pour transformer ceci en quelque chose avec lequel je peux travailler, j'ai lu des exemples, etc., et JSON.net ressemble à la réponse, mais je ne me rend nulle part.

Mon code .Net (Me.TextBox1.Text contient le JSON présenté ci-dessus)

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

Quelqu'un peut-il expliquer pourquoi obj.ID se termine toujours par 0 s'il vous plaît, et pourquoi aucune des autres propriétés de ma classe n'est renseignée et ce que je dois faire pour résoudre ce problème, aucune erreur n'est signalée.

18
Great Big Al

Ta classe JSON_result ne correspond pas à votre chaîne JSON. Notez comment l'objet JSON_result que va représenter est encapsulé dans une autre propriété nommée "Venue".

Donc, soit créer une classe pour cela, par exemple:

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

ou changez votre chaîne JSON en

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

ou utilisez par exemple un ContractResolver pour analyser la chaîne JSON.

27
sloth
Imports Newtonsoft.Json.Linq

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