You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中含数组与列表的JSON反序列化问题求助

问题分析与解决

你的报错核心原因是实体类结构与JSON层级完全不匹配,同时存在属性名称不一致的问题,以下是具体修正方案:


1. 先修正JSON格式

原JSON存在语法错误(第二个数组元素后有多余逗号),先调整为合法JSON:

{"heading":["Date","item","Time"],
"Data":{"CAN":[["2023-09-04T17:48:05","B00412-E5015186",4]
, ["2023-09-04T17:47:03","B00412-E5015186",7],
["2023-09-04T06:34:51","B00412-E5015186",5]]}}

2. 定义匹配的实体类

根据JSON的层级结构,重新编写强类型实体类:

Imports Newtonsoft.Json

' 最外层JSON对象对应的类
Public Class MyObject_Dati
    ' 匹配JSON中的"heading"数组(属性名不一致用JsonProperty标记)
    <JsonProperty("heading")>
    Public Property Heading As String()

    ' 匹配JSON中的"Data"对象
    <JsonProperty("Data")>
    Public Property Data As DataContainer
End Class

' 对应JSON里Data对象的结构(包含CAN数组)
Public Class DataContainer
    ' 匹配JSON中的"CAN"数组
    <JsonProperty("CAN")>
    Public Property CAN As List(Of CanEntry)
End Class

' 对应CAN数组中的每个元素(将JSON数组映射为类实例)
<JsonArray>
Public Class CanEntry
    ' 按JSON数组顺序自动映射:第一个元素→Date,第二个→Item,第三个→Time
    Public Property Date As String
    Public Property Item As String
    Public Property Time As Integer
End Class

3. 执行反序列化

使用修正后的类执行反序列化即可:

Dim myObj = Newtonsoft.Json.JsonConvert.DeserializeObject(Of MyObject_Dati)(_json)

关键说明

  • <JsonProperty("xxx")>:解决实体类属性名与JSON键名不一致的问题,确保反序列化时能正确匹配。
  • <JsonArray>:标记CanEntry类,告诉Newtonsoft.Json将JSON数组直接映射为该类的实例,按属性顺序匹配数组元素。
  • 如果不需要强类型处理CAN数组元素,也可以将CAN属性改为List(Of Object()),直接接收原始数组,但强类型更便于后续业务代码处理。

内容的提问来源于stack exchange,提问作者LukaGer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:01:12