Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json VS在值(VB.NET)后面的花括号中显示类名_Json_Vb.net - Fatal编程技术网

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

Json VS在值(VB.NET)后面的花括号中显示类名,json,vb.net,Json,Vb.net,这可能是一件非常简单的事情,但我就是想不出来 因此,我试图在我的项目中创建一个通用函数,它可以将我抛出的任何JSON解析为vb.net中易于使用的对象。我尝试了JSON.NET,但在我看来,您需要为每个不同的JSON结构创建一个类,因此我决定使用JavaScriptSerializer.Deserialize从System.Web.Scripts.Serialization库进行反序列化。 一切似乎都很好,在我看来,这个函数能够解析任何JSON,而无需事先为其创建类,但当我试图从中提取值时,遇到

这可能是一件非常简单的事情,但我就是想不出来

因此,我试图在我的项目中创建一个通用函数,它可以将我抛出的任何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时,它给出:

?a
"test"
但如果我打印对象b,我会得到:

?b
"test" {String}
    String: "test"
整数和其他数据类型也会发生同样的情况

为什么会发生这种情况?如果没有在JSON对象之后打印的其他内容,我如何从JSON对象获取我的值

另外,如果有人知道一种将JSON解析为VB.net中可读内容的快速方法(无需为我计划使用的所有JSON结构创建不同的类),请随时告诉我:)


提前谢谢

另一个原因是,您有一个对字符串的对象引用,而不是字符串引用-如果您要
Console.WriteLine(…)
Debug.WriteLine(…)
这些,如果您已经有了
json对象,您将无法获得类型信息,您可以使用
Newtonsoft
作为
json解析器
。首先,您必须下载,然后在VisualStudio中添加引用。然后导入这些代码:

Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
您可以使用此代码来解析
json对象

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
的值将覆盖;因此,在循环结束时,您将在
json对象中获得
name
data
的最后一个值。要打印所有值,请确保在循环中添加
console.writeline()
code。像这样:

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

谢谢这样行吗?我应该设法删除引用吗?或者如果它只是停留在那里就可以了吗?在我看来,它看起来有点混乱:/您正在一个调试工具中查看它,该工具试图提供帮助,并向您展示有关它的更多信息。当您在应用程序中实际使用它时,这些都不会显示出来,除非您努力让它显示出来。当我在即时窗口中打印字符串时,我通常担心字符串后面的{String}部分。然而,如果您有任何关于如何轻松解析JSON的提示,那么我洗耳恭听:DThanks这真的很有帮助。我的json对象只是一个字符串。我想这没问题吧?这段代码适用于json对象。尝试重新构造它,也许它可以用于json字符串。我还没试过,但在我们的领域里一切都是可能的。我发布了这个答案,因为你问这个>>>“我怎样才能从JSON对象中获得我的价值”谢谢。我试着用它解析一个JSON字符串,它似乎很有效。如果有帮助,请接受这个答案@是的,很抱歉我忘了。现在就做