反序列化一个简单的 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
这应该很简单,但我想不通。
我有一个简单的 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