VB.Net将JSON数据转换为变量

时间:2014-11-25 21:45:32

标签: json vb.net json.net

在多年没有做任何事情之后,我正在重新审视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是如此困难,我必须遗漏一些基本的东西。

3 个答案:

答案 0 :(得分:1)

这是一个有效的dotNetFiddle:https://dotnetfiddle.net/81Huv6

等待几秒钟以运行代码,然后查看控制台窗口中的输出(该页面的底部窗格)。

这是反序列化的输出。

how to deserialize json vb.net

您必须将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个名称 - 值对。

相关问题