[英]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.