【发布时间】:2021-08-28 06:57:26
【问题描述】:
在将 json 反序列化为数据集时收到以下错误。
Unexpected JSON token when reading DataTable. Expected StartArray, got Integer. Path 'id', line 1, position 9
Json 检索到:{"id":130,"type":"general","setup":"test?","punchline":"test."}
我的代码
Dim wc As New WebClient
Try
Dim res As String
For i = 0 To 5
res = wc.DownloadString("https://official-joke-api.appspot.com/random_joke")
Dim jObject = JsonConvert.DeserializeObject(res)
Dim ds As New DataSet
ds = JsonConvert.DeserializeObject(Of DataSet)(res)
MsgBox(ds.Tables.Count)
Next
Catch ex As Exception
MsgBox(ex)
End Try
【问题讨论】:
-
创建一个类
Joke,其属性为id,type,setup和punchline。JsonConvert.DeserializeObject(Of Joke)(res),然后在每次迭代中将其添加到List<Joke> -
您可能应该使用
Dictionary<int, class>,使用JSON 响应的Id作为Key,这样您就可以避免两次添加相同的对象,以防出现重复。 -
@AkshayGaonkar,如果我必须将其转换为列表,那么我可以使用这个权利! Dim jObject = JsonConvert.DeserializeObject(Of JObject)(res).Root.ToList()
-
API 端点正在返回单个记录。您必须在反序列化后将每条记录添加到列表对象中,而不是每次都将其转换为列表。