在多年没有做任何事情之后,我正在重新审视VB.NET。所以对我来说有点容易,我也搜索过这个并通过Stackoverflow搜索并找不到任何帮助。
我从Web API获得了这个JSON。
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Dim rawresp As String
rawresp = "[{"Var1":"data1","Var2":"data2","Var3":"data3","Var4":"data4"}]"
我尝试过这种方式
Dim json As JObject = JObject.Parse(rawresp)
我尝试过这种方式
Dim obj = JsonConvert.DeserializeObject(Of Vars)(rawresp)
Public Class Vars
Public Property Var1 As String
Public Property Var2 As String
Public Property Var3 As String
Public Property Var4 As String
End Class
我真的很难看到反序列化json是如此困难,我必须遗漏一些基本的东西。
答案 0 :(得分:1)
等待几秒钟以运行代码,然后查看控制台窗口中的输出(该页面的底部窗格)。
您必须将JSON反序列化为Array
Vars
。就像那样。
Dim varses() = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Vars())(rawresp)
另请注意,文字JSON字符串的名称和值字符串用双引号括起来。 由于每个名称和每个值周围缺少额外引用,您可能会收到无效的JSON格式错误。
rawresp = "[{""Var1"":""data1"",""Var2"":""data2"",""Var3"":""data3"",""Var4"":""data4""}]"
在尝试访问里面的项目之前,请务必检查空数组等。
这是完整的代码清单。
Imports System
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
' Author: Shiva Manjunath
' Author's Stackoverflow Profile: http://stackoverflow.com/users/325521/shiva
Public Module Module1
Public Sub Main()
Dim rawresp As String
rawresp = "[{""Var1"":""data1"",""Var2"":""data2"",""Var3"":""data3"",""Var4"":""data4""}]"
Console.WriteLine("Raw JSON : " + rawresp)
Console.WriteLine()
Console.WriteLine("---BEGIN JSON Deserialization")
Dim varses() = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Vars())(rawresp)
' Loop over each Var in the Array of Vars.
For Each oneVar As Vars In varses
' Avoid Nothing vars.
If oneVar IsNot Nothing Then
Console.WriteLine(" Var1 = " + oneVar.Var1)
Console.WriteLine(" Var2 = " + oneVar.Var2)
Console.WriteLine(" Var3 = " + oneVar.Var3)
Console.WriteLine(" Var4 = " + oneVar.Var4)
End If
Next
Console.WriteLine("---END JSON Deserialization")
End Sub
End Module
Public Class Vars
Public Property Var1 As String
Public Property Var2 As String
Public Property Var3 As String
Public Property Var4 As String
End Class
答案 1 :(得分:1)
您正在将数组解析为对象 试着删除" ["和"]"来自json字符串 你必须这样做
Try
Dim rawresp As String = "{'name':'hassan','age':24,'sex':'male'}"
Dim json As JObject = JObject.Parse(rawresp)
MsgBox(json.Item("name"))
Catch ex As Exception
MsgBox(ex.Message)
End Try
答案 2 :(得分:0)
问题是你的JSON代表一个数组(长度为1)的字典。要在C#中反序列化(抱歉,我对VB.Net不是很熟悉):
var obj = JsonConvert.DeserializeObject<Dictionary<string, string>[]>(rawresp);
obj
将是一个包含单个字典的数组,其中包含JSON中显示的4个名称 - 值对。