【问题标题】:VB.Net Getting Value from JSONVB.Net 从 JSON 中获取价值
【发布时间】:2018-03-01 10:10:36
【问题描述】:

请有人帮我从这个 JSON 中获取每个分支中的 branch_id 吗?

{
    "branches": {
        "1": {
            "member_id": "-16",
            "branch_id": "1"
        },
        "2": {
            "member_id": "-16",
            "branch_id": "1"
        }
    }
}

我正在使用 JavaScriptSerialiser 反序列化 JSON,但没有正确执行,因为我认为 JSON 不是我以前使用过的数组:

 Dim jss As New JavaScriptSerializer()
        Dim data As OfficeCheckJsonResponse = jss.Deserialize(Of OfficeCheckJsonResponse)(responseFromServer)

【问题讨论】:

    标签: .net json vb.net javascriptserializer


    【解决方案1】:

    声明一个Branch 类并将属性branches As Dictionary(Of String, Branch) 添加到您的OfficeCheckJsonResponse 类。

    使用 JavaScriptSerialiser,将 JSON 反序列化为 OfficeCheckJsonResponse 的实例。

    您可以通过迭代 data.branches 来获取您的 branch_id 值。您也可以使用 LINQ。

    Sub Main
        Dim responseFromServer = "{
        ""branches"":  {
            ""1"": {
                ""member_id"": ""-16"",
                ""branch_id"": ""1""
            },
            ""2"": {
                ""member_id"": ""-16"",
                ""branch_id"": ""1""
            }
        }
    }"
    
        Dim jss As New JavaScriptSerializer()
        Dim data As OfficeCheckJsonResponse =
            jss.Deserialize(Of OfficeCheckJsonResponse)(responseFromServer)
    
        For Each branch As KeyValuePair(Of String, Branch) In data.branches
            Console.WriteLine(Int32.Parse(branch.Key))
            Console.WriteLine(branch.Value)
        Next
    End Sub
    
    Public Class OfficeCheckJsonResponse
        Public Property branches As Dictionary(Of String, Branch)
    End Class
    
    Public Class Branch
        Property member_id As String
        Property branch_id As String
    End Class
    

    【讨论】:

      【解决方案2】:

      使用 Newtonsoft,对象类型是字典(整数,SampleClass),就像在同一主题中一样,查看链接 Go This Link

          Dim JsonSettings = New Newtonsoft.Json.JsonSerializerSettings
          JsonSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore
          Dim OutObject = Newtonsoft.Json.JsonConvert.DeserializeObject(Of branch)("###JSONSTRING###")
          Public Class branch
              Property branches As Dictionary(Of Integer, SampleClass)
              Class SampleClass
                  Property member_id As String
                  Property branch_id As String
              End Class
          End Class
      

      Class 在 Value 属性中,Key 是 Unique String,在这种情况下是 1,2,3,4 ...

               For Each DictionaryElement As KeyValuePair(Of String, BranchesData) In branches
                  Debug.Print(DictionaryElement.Key) 'Is Key 1,2,3 etc..
                  'DictionaryElement.Value is BranchesData
                  Debug.Print(DictionaryElement.Value.branch_id)
                  Debug.Print(DictionaryElement.Value.member_id)
              Next
      

      【讨论】:

      • 嗨诺伯特。谢谢你。我已经使用了您的建议并设法将数据反序列化但无法进行迭代。我已经修改了上面的初始消息以显示。您能否建议我如何获取 branch_id 和 member_id?
      • 想多了.. 只是循环 For x = 1 To data.branches.Count 并获取值.. 感谢您的智慧和帮助..
      猜你喜欢
      • 2013-04-11
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 2019-07-20
      • 1970-01-01
      相关资源
      最近更新 更多