簡體   English   中英

VB.Net 多維 Json 字符串

[英]VB.Net multidimensional Json String

我不是 VB.Net 程序員,但一直被迫這樣做。 我已經研究了幾天,並在谷歌上反復搜索。 更有經驗的程序員告訴我來這里問,因為他們也不知道VB.net。

我有一個 json 字符串,為了簡潔起見,去掉了一些內部數據......

{
    "_links": {
        "self": {
            "href": "URL"
        },
        "first": {
            "href": "URL"
        },
        "last": {
            "href": "URL"
        }
    },
    "_embedded": {
        "account": [
            {
                "user": "Bob",
                "text": "Some Text",
                "status": "*ENABLED",
                "_links": {
                    "self": {
                        "href": "Some URL"
                    }
                }
            },
            {
                "user": "Joe",
                "text": "Some Other Text",
                "status": "*ENABLED",
                "_links": {
                    "self": {
                        "Some Other URL"
                    }
                }
            }
        ]
    },
    "page_count": 1,
    "page_size": 25000,
    "total_items": 1109,
    "page": 1
}

我正在使用 .net 3.5 並且可以遍歷內部項目以獲取數據:

Dim myData As Dictionary(Of String, Object)
myData = serializer.DeserializeObject(myResult)

Dim newData = myData.Item("_embedded")
Dim accountData= newData.Item("account")

For Each account As Object In accountData
    Dim tmpData As Dictionary(Of String, Object) = CType(account, Dictionary(Of String, Object))
    Console.WriteLine("User: " & tmpData.Item("user").ToString())
    Console.WriteLine("Account Text: " & tmpData.Item("text").ToString())
    Console.WriteLine("Status: " & tmpData.Item("status").ToString())
    tmpData.Clear()
Next

但是,我必須打開“Strict On”,當我這樣做時,我會按預期收到代碼錯誤。 我讀過的大多數建議都說要使用大量的 CType、TryCast 等。 我也聽說 json.net 會工作得更好,但過去 3 天我一直在嘗試谷歌並嘗試不同的東西......

我在 Strict 關閉的情況下運行了調試器,並觀察了各種行的投射方式,並試圖重新創建但無濟於事......

除了關閉 Strict 之外,我願意嘗試其他建議,因為我沒有那么奢侈……

使用 NewtonSoft,您可以非常輕松地迭代數據:

Dim jstr = ...
Dim jobj = JObject.Parse(jstr)

Dim jdata = jobj("_embedded")("account")

For Each j As JObject In jdata
    Console.WriteLine("User: " & j.Item("user").ToString())
    Console.WriteLine("Account Text: " & j.Item("text").ToString())
    Console.WriteLine("Status: " & j.Item("status").ToString())
Next

輸出:

用戶:鮑勃
帳戶文本:一些文本
狀態:*已啟用
用戶:喬
帳戶文本:一些其他文本
狀態:*已啟用

您不僅可以打印,還可以存儲到集合中。 您還可以使用一些類直接創建類型化集合:

Public Class Account
    Public Property user As String
    Public Property text As String
    Public Property status As String
    <JsonProperty("_links")>
    Public Property Links As LinkInfo
End Class

Public Class Self
    Public Property href As String
End Class

Public Class LinkInfo
    Public Property self As Self
End Class

這是 json 的“帳戶”部分的結構,所以現在我們可以反序列化為List(Of Account)

Dim jobj = JObject.Parse(jstr)
Dim jdata = jobj("_embedded")("account")
Dim myAccts = JsonConvert.DeserializeObject(Of List(Of Account))(jdata.ToString)

myAccts將是一個List其中包含 json 中每個事物的Account項目。 請注意,其中一些類可能需要工作 - 有限的 2 個樣本可能無法全面了解它們的外觀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM