我正在尝试将JSON对象(它是一个数组)反序列化为一个名为County的公共类的Generic List。以下是我收到的JSON摘录:
{
"Alachua":0,
"Baker":1,
"Bay":2,
"Bradford":3,
"Brevard":4,
"Broward":5,
"Calhoun":6,
"Charlotte":7
}
这是课程:
<Serializable()> _
Public Class County
Private _name As String
Private _code As Integer
Public Property Code() As Integer
Get
Return Me._code
End Get
Set(value As Integer)
Me._code = value
End Set
End Property
Public Property Name() As String
Get
Return Me._name
End Get
Set(value As String)
Me._name = value
End Set
End Property
End Class
然而,由于JSON数组的格式没有按照我通常期望的方式正确设置,所以我无法对其进行序列化。
我目前正在使用Newtonsoft:
Dim countyResponse As List(Of County) = ParseRequestJSON(Of List(Of County))(request)
这里有一个例外:
无法将当前JSON对象(例如{"name":"value"})反序列化为类型"System.Collections.Generic.List`1[Models.County]",因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或者更改反序列化的类型,使其成为可以从JSON对象反序列化的普通.NET类型(例如,不是像integer这样的基元类型,也不是像array或List这样的集合类型)。JsonObjectAttribute也可以添加到类型中,以强制它从JSON对象反序列化。路径"Alachua",第2行,位置12。
任何帮助都将不胜感激,请不要被VB.net吓跑。
感谢@user2864740,我们有了答案。反序列化为具有字符串键和整数值的IDictionary。然后我循环浏览IDictionary并将县添加到列表中。
Dim countyResponse As IDictionary(Of String, Integer) = ParseRequestJSON(Of IDictionary(Of String, Integer))(request)
If IsNothing(countyResponse) = False Then
For Each c In countyResponse
Dim county As County = New County
county.Code = c.Value
county.Name = c.Key
Counties.Add(county)
Next
End If