VB.net中使用json.net的简单示例

25

我有一个来自服务提供商的简化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,以及为什么我的类的其他属性都没有被填充,并且我需要做什么来解决这个问题,没有报告任何错误。

3个回答

32

您的类 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"
    }
}

或者例如使用ContractResolver来解析JSON字符串。


10
我使用这个网站 http://jsonutils.com/ 来自动生成 JSON 字符串的类,以便加快一些速度。想提一下给其他人知道。 - mikro
据我所知,微软还有一个VS插件在一些ASP.Net工具包中,但我忘记了它的名字... - sloth
@mikro,感谢您提供的链接。非常实用!非常感谢! - Wayne Barron

26
Imports Newtonsoft.Json.Linq

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

您可以从NuGet软件包管理器安装Newtonsoft。在VB 2019中,您可以在工具- NuGet软件包管理器-管理解决方案的NuGet软件包中找到它。 - Wild Teddy

0

使用这个的替代方案是

MsgBox(json.SelectToken("Venue").SelectToken("ID"))

你也可以使用

MsgBox(json.SelectToken("Venue.ID"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接