【问题标题】:VB.Net Convert JSON data to VariablesVB.Net 将 JSON 数据转换为变量
【发布时间】:2014-11-25 21:45:31
【问题描述】:

在多年未使用 VB.NET 之后,我正在重新审视它。所以对我来说放轻松一点,我也用谷歌搜索过这个并通过 Stackoverflow 进行搜索,但没有找到任何帮助。

我有这个来自网络 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 这么困难,我一定错过了一些基本的东西。

【问题讨论】:

    标签: json vb.net json.net


    【解决方案1】:

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

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

    这是反序列化的输出。

    您必须将 JSON 反序列化为 ArrayVars。像这样。

    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
    

    【讨论】:

    • 谢谢,您的回答已被采纳并已被接受。
    【解决方案2】:

    您正在将数组解析为对象 尝试从 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
    

    【讨论】:

      【解决方案3】:

      问题在于您的 JSON 代表一个字典数组(长度为 1)。在 C# 中反序列化它(对不起,我对 VB.Net 不是很熟悉):

      var obj = JsonConvert.DeserializeObject<Dictionary<string, string>[]>(rawresp);
      

      obj 将是一个包含单个字典的数组,其中包含 JSON 中显示的 4 个名称-值对。

      【讨论】:

      • 或者只是反序列化成Vars的数组
      • @AndrewWhitaker 是的,我在开车回家时意识到了这一点 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 2022-01-23
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多