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

使用NewtonSoft JSON反序列化JSON至DataSet或字典时遇异常

问题原因分析

  1. 反序列化为Dictionary(Of String, String)报错:
    你的JSON里data字段对应的值是一个嵌套JSON对象(包含name和age),但你声明的字典值类型是String,Newtonsoft JSON无法将对象直接转换成字符串,因此抛出解析异常。

  2. 反序列化为DataSet异常:
    DataSet是基于关系表的结构,更适合解析数组形式的JSON(比如{"表名": [{"列1": "值1"}, ...]})。你的JSON是顶层对象嵌套子对象的结构,直接转DataSet时,Newtonsoft无法自动将嵌套对象映射到DataSet的表结构,导致异常。

解决方案

方案1:使用强类型类(推荐)

创建对应JSON结构的类,反序列化更清晰且类型安全:

Public Class Instruction
    Public Property id As String
    Public Property data As PersonInfo
End Class

Public Class PersonInfo
    Public Property name As String
    Public Property age As String
End Class

' 反序列化代码
Dim result = JsonConvert.DeserializeObject(Of Instruction)(TheJsonInstruction)

方案2:使用Dictionary(Of String, Object)接收

如果不想定义类,可以用Object类型接收值,后续再处理嵌套对象:

Dim values = JsonConvert.DeserializeObject(Of Dictionary(Of String, Object))(TheJsonInstruction)
' 取出data对象并转换为字符串字典
Dim dataDict = JsonConvert.DeserializeObject(Of Dictionary(Of String, String))(values("data").ToString())

方案3:调整JSON结构适配DataSet

如果一定要用DataSet,把JSON改成表数组的形式:

{
  "Instructions": [
    {
      "id": "qh06fx6",
      "name": "john",
      "age": "30"
    }
  ]
}

然后执行反序列化:

Dim dataset = JsonConvert.DeserializeObject(Of DataSet)(TheJsonInstruction)
' 此时dataset里会生成一个名为Instructions的DataTable

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:47:13