web-dev-qa-db-ja.com

VB.netでのjson.netの簡単な作業例

プロバイダーから次の簡略化されたJSON文字列を取得しました。VisualStudioと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になる理由と、クラスの他のプロパティが設定されておらず、これを修正するために必要なことを説明してもらえますか、エラーは報告されません。

18
Great Big Al

クラス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"
    }
}

または使用しますJSON文字列を解析するContractResolver.

27
sloth
Imports Newtonsoft.Json.Linq

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