【发布时间】:2016-09-07 11:37:13
【问题描述】:
我正在尝试将 JSON 对象(它是一个数组)反序列化为名为 County 的公共类的通用列表。这是我收到的 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]),要么将反序列化类型更改为普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型可以从 JSON 对象反序列化的数组或列表。 JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。路径“Alachua”,第 2 行,位置 12。
我们将不胜感激,请不要被 VB.net 吓到。
【问题讨论】:
-
输入是一个格式正确的 JSON 对象。所以将其反序列化为一个(可以映射到一个IDictionary):然后按照程序的要求将其转换为一个数组。
-
你是对的。它的格式正确。这不是我所期望的。
-
某人/某物生成了 JSON 输入。一个简单的消费者只需要处理;即使它可能以不同的方式和/或更适当地序列化。如果还控制生产者,则可以更改序列化和有线合同。
-
我无法修改回复,但您的建议有效。我将其发布为我自己问题的答案。感谢您的帮助和快速响应!!!
标签: arrays json serialization json.net json-deserialization