反序列化一个简单的 JSON 数组

Deserializing a simple JSON array

这应该很简单,但我想不通。

我有一个简单的 JSON 数组: [{"carId":1,"status":"有效","库存":"3"}, {"carId":2,"status":"Active","inventory":"5"}]

我有我的 JSON 类:

Friend Class carModel
    Public Property carId As String
    Public Property status As String
    Public Property inventory As String
End Class

Friend Class carWrapper
    Friend arrcarModel() As carModel
End Class

我有以下代码:

Dim currentWrapper = DeserializeObject(Of List(Of carWrapper))(strJSON)

If currentWrapper.Count > 0 Then
    For i As Integer = 0 To RXWrapper.Count - 1
        Dim carItem = currentWrapper(i).arrcarModel
    Next
End If

尽管代码确实会导致 currentWrapper.Count = 2,但 currentWrapper(i).arrcarModel 最终总是等于 Nothing。

我做错了什么?是否有更标准的方法来反序列化 JSON 数组?

谢谢!

Visual Studio 有一个很酷的功能,称为将 JSON 粘贴为 类,可以在“编辑”>“选择性粘贴”>“将 JSON 粘贴为 类 下找到。如果你这样做,那么你会得到如下所示的东西:

Public Class Rootobject
    Public Property Property1() As Class1
End Class

Public Class Class1
    Public Property carId As Integer
    Public Property status As String
    Public Property inventory As String
End Class

就我个人而言,我会通过重命名和使用装饰器来稍微清理一下 class。例如:

Public Class CarWrapper

    Public Property CarModels As IEnumerable(Of CarModel)

End Class

Public Class CarModel

    <JsonProperty("carId")>
    Public Property CarId As Integer

    <JsonProperty("status")>
    Public Property Status As String

    <JsonProperty("inventory")>
    Public Property Inventory As String

End Class

现在您要做的是创建 CarWrapper class 的新实例并将 CarModels 属性 设置为等于 [=24= 的反序列化]:

Dim json = <json>
            [
                {
                    "carId": 1,
                    "status": "Active",
                    "inventory": "3"
                },
                {
                    "carId": 2,
                    "status": "Active",
                    "inventory": "5"
                }
            ]
            </json>.Value
Dim wrapper = New CarWrapper() With {
    .CarModels = JsonConvert.DeserializeObject(Of CarModel())(json)
}

For Each model In wrapper.CarModels
    Console.WriteLine("Id: {0}, Status: {1}, Inventory: {2}", model.CarId, model.Status, model.Inventory)
Next