我刚刚学习VB 2010的基础知识,我正在尝试设计一个程序来维护数据库。我的数据库中有一个 JSON 字符串,其中包含图像文件及其相关 ID 号的列表。这是 JSON 格式,因为网站也使用此数据。 示例代码为
[{"ID": 0, "Path": "Image0.jpg"},{"ID": 1, "Path": "Image1.jpg"}, {"ID": 2, "Path": "Image2.jpg"},{"ID": 3, "Path": "Image3.jpg"}]
我尝试过使用 JSON.NET,但我是新手,不知道为什么它不起作用。
我希望有一种方法可以返回图像文件,例如在 php $DecodedArray[0]
中可以工作,我正在寻找一种在 Visual Basic 中复制它的方法。
Imports System.Web.Script.Serialization
Module Module1
Public Class Target
Public ID, Image As String
End Class
Sub Main()
Console.Clear()
Dim ser As New JavaScriptSerializer()
Dim input As String = My.Computer.FileSystem.ReadAllText("JSONFile.txt")
'[{"ID": 0, "Path": "Image0.jpg"},{"ID": 1, "Path": "Image1.jpg"}, {"ID": 2, "Path": "Image2.jpg"},{"ID": 3, "Path": "Image3.jpg"}]
Console.WriteLine(input)
Console.WriteLine()
Dim output As Target = ser.Deserialize(Of Target)(input)
Console.Write(output.ID.0)
Console.ReadKey()
End Sub
End Module
使用此代码,我希望输出为 Image0.jpg
请注意,我无法从 Visual Basic 2010 Express 升级
最佳答案
由于您的 JSON 具有数字键而不是预期的键,因此很难定义自定义类型来匹配它。我相信您最好的选择是反序列化为 Dictionary(Of String, String)
- 这将正确反序列化,您可以通读字典来获取您的项目。
所以:
Dim output = ser.Deserialize(Of Dictionary(Of String, String))(input)
For Each key As String In output.Keys
Console.WriteLine("{0}: {1}", key, output(key))
Next
通常,当您定义常规类型时,您必须知道 JSON 属性的名称。给定您的 Target
类,您的 JSON 实际上如下所示:
[
{ "ID":"0", "Image":"Image0.jpg" },
{ "ID":"1", "Image":"Image1.jpg" },
{ "ID":"2", "Image":"Image2.jpg" }
]
它会反序列化为一组 Target 对象,而不是单个对象。但如果您坚持使用现有的 JSON,那么 Dictionary
就是您的最佳选择。
如果您能够从此处使用更清晰的 JSON,则您的代码几乎是正确的。您只需反序列化为数组,就可以访问该数组的元素。所以:
Dim output = ser.Deserialize(Of Target())(input)
For i As Integer = 0 To output.GetUpperBound(0)
Console.WriteLine("{0}: {1}", output(i).ID, output(i).Image)
Next
关于arrays - 在 Visual Basic 2010 Express 中解码 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19037282/