VS在值(VB.NET)后的大括号中显示类名

时间:2015-06-04 08:29:31

标签: json vb.net

这可能是一件非常简单的事情,但我无法弄明白。

所以我正在尝试在我的项目中创建一个通用函数,它可以将我抛出的任何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结构创建不同的类),那么请随时告诉我:)

提前致谢!

2 个答案:

答案 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

请记住,随着循环的继续,namedata的值会覆盖;因此,在循环结束时,您会在name中获得datajson 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