无法反序列化 JSON 对象,因为它实际上是一个格式不正确的数组



我正在尝试将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

相关内容

  • 没有找到相关文章

最新更新