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
相关产品推荐
相关产品推荐

