使用NewtonSoft JSON反序列化JSON至DataSet或字典时遇异常
问题原因分析
反序列化为
Dictionary(Of String, String)报错:
你的JSON里data字段对应的值是一个嵌套JSON对象(包含name和age),但你声明的字典值类型是String,Newtonsoft JSON无法将对象直接转换成字符串,因此抛出解析异常。反序列化为
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
相关产品推荐
相关产品推荐

