这可能是一件非常简单的事情,但我无法弄明白。
所以我正在尝试在我的项目中创建一个通用函数,它可以将我抛出的任何JSON解析为vb.net中易于使用的对象。我试过了JSON.NET
,但在我看来,你需要为每个不同的JSON结构创建一个类,所以我决定使用JavaScriptSerializer.Deserialize
库中的System.Web.Scripts.Serialization
。
一切似乎都很好,我认为这个函数能够解析任何JSON,而不需要事先为它创建一个类,但是当我试图从中提取值时,我遇到了一些麻烦。
因此,通常当我创建一个字符串然后在立即窗口中打印它时,它只打印字符串。但是如果我打印出我解析的JSON的一个元素,它会在它之后输出类名。
这是我的代码:
Dim jss = New JavaScriptSerializer()
Dim out = jss.Deserialize(Of Object)(jsonString)
Dim a = "test"
Dim b = out("name")
我的JSON字符串如下所示:
{"name": "test", "data": "Hello"}
现在,当我打印对象时,它会给出:
?a
"test"
但如果我打印对象b,我会得到:
?b
"test" {String}
String: "test"
整数和其他数据类型也会发生同样的事情
为什么会发生这种情况?如果没有在其后打印的其他内容,我如何从JSON对象中获取我的值?
此外,如果有人知道一种快速的方法将JSON解析为VB.net中的可读内容(不为我计划使用的所有JSON结构创建不同的类),那么请随时告诉我:)
提前致谢!
答案 0 :(得分:0)
其他的东西是因为你有一个对象引用字符串而不是字符串引用 - 如果你是Console.WriteLine(...)
或Debug.WriteLine(...)
那些,你就得不到类型信息
答案 1 :(得分:0)
如果您已拥有json object
,则可以使用Newtonsoft
作为json parser
。首先,您必须下载Newtonsoft,然后在Visual Studio中添加引用。然后导入这些代码:
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
您可以使用此代码来解析json object
For Each value As Object In yourJsonObject
token = JObject.Parse(value.ToString())
Dim name = token.SelectToken("name")
Dim data = token.SelectToken("data")
Next value
请记住,随着循环的继续,name
和data
的值会覆盖;因此,在循环结束时,您会在name
中获得data
和json object
的最后一个值。要打印所有值,请确保在循环内添加console.writeline()
代码。像这样:
For Each value As Object In yourJsonObject
token = JObject.Parse(value.ToString())
Dim name = token.SelectToken("name")
Dim data = token.SelectToken("data")
Console.WriteLine("Name: {0}, Data: {1}", name.toString, data.toString)
Next value