VB.NET多个嵌套JSON,按最下面的第一个列出

VB.NET多个嵌套JSON,按最下面的第一个列出,json,vb.net,Json,Vb.net,我的JSON { "items": { "averageItemLevel": 564, "averageItemLevelEquipped": 564, "head": { "id": 99161, "stats": [ { "stat": 32,

我的JSON

    {
        "items": {
            "averageItemLevel": 564,
            "averageItemLevelEquipped": 564,
            "head": {
                "id": 99161,
                "stats": [
                    {
                        "stat": 32,
                        "amount": 651,
                        "reforgedAmount": -434
                    },
                    {
                        "stat": 5,
                        "amount": 2001
                    },
                    {
                        "stat": 36,
                        "amount": 1544
                    },
                    {
                        "stat": 7,
                        "amount": 3362
                    },
                    {
                        "stat": 49,
                        "amount": 434,
                        "reforged": true
                    }
                ],
                "armor": 2244
            }


}
}
当前代码

Dim stat0 = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString())
            Select Case stat0
                Case 1
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Health")
                Case 2
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Mana")
                Case 3
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Agility")
                Case 4
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Strength")
                Case 5
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Intellect")
                Case 6
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Spirit")
                Case 7
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Stamina")

    And So on....
End Select
Dim parsed As String = "yourJsonWillbeHere"
Dim deserialized As RootObject = JsonConvert.DeserializeObject(Of RootObject)(parsed.ToString())
这将生成一个标签文本,其中显示

32 Critical Strike
然而,我真正想做的是显示所有的统计数据,使它看起来像

+3362 Stamina
+2001 Intellect
+651 Critical Strike
+1544 Haste
+434 Mastery (Reforged From Critical Strike)
如果可能的话,所有数据都在一个多行字段中,因此我不必定义每个统计数据

我想如果


我不知道如何在不使用单个标签的情况下显示,如果可能的话,我更希望使用更好的方式?

更新:

Public Class Stat
    Public Property stat() As Integer
        Get
            Return m_stat
        End Get
        Set
            m_stat = Value
        End Set
    End Property
    Private m_stat As Integer
    Public Property amount() As Integer
        Get
            Return m_amount
        End Get
        Set
            m_amount = Value
        End Set
    End Property
    Private m_amount As Integer
    Public Property reforgedAmount() As Integer
        Get
            Return m_reforgedAmount
        End Get
        Set
            m_reforgedAmount = Value
        End Set
    End Property
    Private m_reforgedAmount As Integer
    Public Property reforged() As System.Nullable(Of Boolean)
        Get
            Return m_reforged
        End Get
        Set
            m_reforged = Value
        End Set
    End Property
    Private m_reforged As System.Nullable(Of Boolean)
End Class

Public Class Head
    Public Property id() As Integer
        Get
            Return m_id
        End Get
        Set
            m_id = Value
        End Set
    End Property
    Private m_id As Integer
    Public Property stats() As List(Of Stat)
        Get
            Return m_stats
        End Get
        Set
            m_stats = Value
        End Set
    End Property
    Private m_stats As List(Of Stat)
    Public Property armor() As Integer
        Get
            Return m_armor
        End Get
        Set
            m_armor = Value
        End Set
    End Property
    Private m_armor As Integer
End Class

Public Class Items
    Public Property averageItemLevel() As Integer
        Get
            Return m_averageItemLevel
        End Get
        Set
            m_averageItemLevel = Value
        End Set
    End Property
    Private m_averageItemLevel As Integer
    Public Property averageItemLevelEquipped() As Integer
        Get
            Return m_averageItemLevelEquipped
        End Get
        Set
            m_averageItemLevelEquipped = Value
        End Set
    End Property
    Private m_averageItemLevelEquipped As Integer
    Public Property head() As Head
        Get
            Return m_head
        End Get
        Set
            m_head = Value
        End Set
    End Property
    Private m_head As Head
End Class

Public Class RootObject
    Public Property items() As Items
        Get
            Return m_items
        End Get
        Set
            m_items = Value
        End Set
    End Property
    Private m_items As Items
End Class
在本例中,您可以做的是,设置一个
RootClass
,它将为JSON的结构建模。使用免费库进行序列化/反序列化

像这样:

Public Class Stat
    Public Property stat() As Integer
        Get
            Return m_stat
        End Get
        Set
            m_stat = Value
        End Set
    End Property
    Private m_stat As Integer
    Public Property amount() As Integer
        Get
            Return m_amount
        End Get
        Set
            m_amount = Value
        End Set
    End Property
    Private m_amount As Integer
    Public Property reforgedAmount() As Integer
        Get
            Return m_reforgedAmount
        End Get
        Set
            m_reforgedAmount = Value
        End Set
    End Property
    Private m_reforgedAmount As Integer
    Public Property reforged() As System.Nullable(Of Boolean)
        Get
            Return m_reforged
        End Get
        Set
            m_reforged = Value
        End Set
    End Property
    Private m_reforged As System.Nullable(Of Boolean)
End Class

Public Class Head
    Public Property id() As Integer
        Get
            Return m_id
        End Get
        Set
            m_id = Value
        End Set
    End Property
    Private m_id As Integer
    Public Property stats() As List(Of Stat)
        Get
            Return m_stats
        End Get
        Set
            m_stats = Value
        End Set
    End Property
    Private m_stats As List(Of Stat)
    Public Property armor() As Integer
        Get
            Return m_armor
        End Get
        Set
            m_armor = Value
        End Set
    End Property
    Private m_armor As Integer
End Class

Public Class Items
    Public Property averageItemLevel() As Integer
        Get
            Return m_averageItemLevel
        End Get
        Set
            m_averageItemLevel = Value
        End Set
    End Property
    Private m_averageItemLevel As Integer
    Public Property averageItemLevelEquipped() As Integer
        Get
            Return m_averageItemLevelEquipped
        End Get
        Set
            m_averageItemLevelEquipped = Value
        End Set
    End Property
    Private m_averageItemLevelEquipped As Integer
    Public Property head() As Head
        Get
            Return m_head
        End Get
        Set
            m_head = Value
        End Set
    End Property
    Private m_head As Head
End Class

Public Class RootObject
    Public Property items() As Items
        Get
            Return m_items
        End Get
        Set
            m_items = Value
        End Set
    End Property
    Private m_items As Items
End Class
然后,您可以
反序列化
您的数据,并创建一个动态扩展的对象列表

例如

Dim stat0 = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString())
            Select Case stat0
                Case 1
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Health")
                Case 2
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Mana")
                Case 3
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Agility")
                Case 4
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Strength")
                Case 5
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Intellect")
                Case 6
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Spirit")
                Case 7
                    stat0lbl.Text = If(jResults("items")(itemtypelbl.Text) Is Nothing, "", jResults("items")(itemtypelbl.Text)("stats")(0)("stat").ToString() + " Stamina")

    And So on....
End Select
Dim parsed As String = "yourJsonWillbeHere"
Dim deserialized As RootObject = JsonConvert.DeserializeObject(Of RootObject)(parsed.ToString())

更新#2

下面是我在VB.NET中创建的一个完整的工作示例,希望这对您有所帮助

注意:记住下载Newtonsoft Json.Net库,并将引用添加到下载的DLL中。这个例子中的任何一个都不起作用,请注意我是
Imports Newtonsoft.Json

Option Explicit On

Imports Newtonsoft.Json

Module Module1

    Public Sub Main()
        Dim jsonData As String = "{""items"":{""averageItemLevel"":564,""averageItemLevelEquipped"":564,""head"":{""id"":99161,""stats"":[{""stat"":32,""amount"":651,""reforgedAmount"":-434},{""stat"":5,""amount"":2001},{""stat"":36,""amount"":1544},{""stat"":7,""amount"":3362},{""stat"":49,""amount"":434,""reforged"":true}],""armor"":2244}}}"

        Dim deserialized = JsonConvert.DeserializeObject(Of RootObject)(jsonData.ToString())

        Console.WriteLine("Head Stats: ")

        For Each item In deserialized.items.head.stats
            Console.WriteLine("Amount: " + item.amount.ToString)
            Console.WriteLine("Reforged: " + item.reforged.ToString)
            Console.WriteLine("Reforged Amount: " + item.reforgedAmount.ToString)
            Console.WriteLine("Stat: " + item.stat.ToString)
            Console.WriteLine("---------")
        Next

        Console.ReadKey()

    End Sub

End Module

Public Class Stat
    Public Property stat() As Integer
        Get
            Return m_stat
        End Get
        Set(value As Integer)
            m_stat = Value
        End Set
    End Property
    Private m_stat As Integer
    Public Property amount() As Integer
        Get
            Return m_amount
        End Get
        Set(value As Integer)
            m_amount = Value
        End Set
    End Property
    Private m_amount As Integer
    Public Property reforgedAmount() As Integer
        Get
            Return m_reforgedAmount
        End Get
        Set(value As Integer)
            m_reforgedAmount = Value
        End Set
    End Property
    Private m_reforgedAmount As Integer
    Public Property reforged() As System.Nullable(Of Boolean)
        Get
            Return m_reforged
        End Get
        Set(value As System.Nullable(Of Boolean))
            m_reforged = Value
        End Set
    End Property
    Private m_reforged As System.Nullable(Of Boolean)
End Class

Public Class Head
    Public Property id() As Integer
        Get
            Return m_id
        End Get
        Set(value As Integer)
            m_id = Value
        End Set
    End Property
    Private m_id As Integer
    Public Property stats() As List(Of Stat)
        Get
            Return m_stats
        End Get
        Set(value As List(Of Stat))
            m_stats = Value
        End Set
    End Property
    Private m_stats As List(Of Stat)
    Public Property armor() As Integer
        Get
            Return m_armor
        End Get
        Set(value As Integer)
            m_armor = Value
        End Set
    End Property
    Private m_armor As Integer
End Class

Public Class Items
    Public Property averageItemLevel() As Integer
        Get
            Return m_averageItemLevel
        End Get
        Set(value As Integer)
            m_averageItemLevel = Value
        End Set
    End Property
    Private m_averageItemLevel As Integer
    Public Property averageItemLevelEquipped() As Integer
        Get
            Return m_averageItemLevelEquipped
        End Get
        Set(value As Integer)
            m_averageItemLevelEquipped = Value
        End Set
    End Property
    Private m_averageItemLevelEquipped As Integer
    Public Property head() As Head
        Get
            Return m_head
        End Get
        Set(value As Head)
            m_head = Value
        End Set
    End Property
    Private m_head As Head
End Class

Public Class RootObject
    Public Property items() As Items
        Get
            Return m_items
        End Get
        Set(value As Items)
            m_items = Value
        End Set
    End Property
    Private m_items As Items
End Class

我想你可能犯了错误,我不想对每个属性做
txtextbox.Text+=jResults(“项”)…
我想把它们都拉出来,如果可能的话显示出来。问题是有时可能有3个属性,下一个可能有7个属性。我正在寻找一种方法,从json中拉出来整个属性组,并轻松输出它们。没有冒犯,看看C#!我非常喜欢VB.NET,老实说,改成C#是值得的我想我会在这个项目完成后进行切换。如何将您的C#转换为VB.net?我可以将head对象设置为itemtypelbl.Text吗?因为每次悬停时它都是不同的项目,例如头部、颈部、肩部等。。。而itemtypelbl.Text定义了它