访问数组中的项目

Accessing an item inside an array

请参阅下面的 JSON,我已使用 https://jsonlint.com/:

对其进行了验证
{
    "meta": {
        "limit": 3,
        "count": 3
    },
    "data": [{
            "id": "1",
            "MoreInformation": {
                "id2": "22"
            },
            "type": "Person"
        },
        {
            "id": "2",
            "MoreInformation": {
                "id2": "42"
            },
            "type": "Person"
        },
        {
            "id": "3",
            "MoreInformation": {
                "id2": "99"
            },
            "type": "Person"
        }
    ]
}

请看下面的代码:

Module Module1

    Sub Main()
        Dim json As String = "{""meta"": {""limit"": 2,""count"": 2},""data"": [{""id"": ""1"",""MoreInformation"": {""id2"": ""22""},""type"": ""Person""},{""id"": ""2"",""MoreInformation"": {""id2"": ""42""},""type"": ""Person""},{""id"": ""3"",""MoreInformation"": {""id2"": ""99""},""type"": ""Person""}]}"
        Dim jo As JObject = JObject.Parse(json)
        Dim a As JArray = CType(jo("data"), JArray)
        Dim list As New List(Of Person)

        For Each item In a.Children()
            Dim itemProperties = item.Children(Of JProperty)()
            Dim person As New Person
            person.id1 = itemProperties.FirstOrDefault(Function(x) x.Name = "id")
            person.id2 = itemProperties.FirstOrDefault(Function(x) x.Name = "id2")
            list.Add(person)
        Next
    End Sub

End Module

Public Class Person
    Public Property id1
    Public Property id2
End Class

我希望输出是三个人的列表。

这一行有问题:

person.id2 = itemProperties.FirstOrDefault(Function(x) x.Name = "id2")

它总是returns什么都没有。如何使用 JSON?

中的 id2 填充 person.id2

更新

这个有效:

Sub Main()
        Dim json As String = "{""meta"": {""limit"": 2,""count"": 2},""data"": [{""id"": ""1"",""MoreInformation"": {""id2"": ""22""},""type"": ""Person""},{""id"": ""2"",""MoreInformation"": {""id2"": ""42""},""type"": ""Person""},{""id"": ""3"",""MoreInformation"": {""id2"": ""99""},""type"": ""Person""}]}"
        Dim jo As JObject = JObject.Parse(json)
        Dim a As JArray = CType(jo("data"), JArray)
        Dim list As List(Of Person) = JsonConvert.DeserializeObject(Of List(Of Person))(a.ToString)
        Console.WriteLine("got here")
    End Sub

如果我将 类 更改为:

Public Class Person
    Public Property id
    Public Property MoreInformation
End Class

Public Class MoreInformation
    Public Property id2
End Class

但是,我仍然不知道如何让我原来 post 中的代码正常工作。

我不确定这是否是您想要的答案,但我尝试了如下代码。

 Try

         Dim json As String = "{""meta"": {""limit"": 2,""count"": 2},""data"": [{""id"": ""1"",""MoreInformation"": {""id2"": ""22""},""type"": ""Person""},{""id"": ""2"",""MoreInformation"": {""id2"": ""42""},""type"": ""Person""},{""id"": ""3"",""MoreInformation"": {""id2"": ""99""},""type"": ""Person""}]}"
         Dim jo As JObject = JObject.Parse(json)
         Dim a As JArray = CType(jo("data"), JArray)
         Dim list As New List(Of Person)

         For Each item In a.Children()
            Dim itemProperties = item.Children(Of JProperty)()
            Dim itemProperties2 = item.SelectToken("MoreInformation").Children(Of JProperty)()

            Dim person As New Person
            person.id1 = itemProperties.FirstOrDefault(Function(x) x.Name = "id")
            person.id2 = itemProperties2.FirstOrDefault(Function(x) x.Name = "id2")
            list.Add(person)
         Next

         For Each item In list

            Debug.WriteLine("id1:" & item.id1.ToString & " id2:" & item.id2.ToString)

         Next
      Catch ex As Exception
         MsgBox(ex.ToString)
      End Try