我有一个简单的JSON字符串,我试图使用原生的.net 4.0而不是NewtonSoft来解析Visual Studio Express 2010。我试图解析的json数据如下所示。
"{"token_type":"Bearer",""expires_in":3599,"access_token":"VxwK6YWYj6paqyMK2D2r4uDl34qg"}"
我可以使用以下代码运行而不会出现错误,但是当我尝试转储对象的内容时,我在列表中没有任何内容。这是我创建的课程。
Public Class AuthToken
Public Property token_type As String
Get
Return m_token_type
End Get
Set(ByVal value As String)
m_token_type = value
End Set
End Property
Private m_token_type As String
Public Property expires_in() As Integer
Get
Return m_expires_in
End Get
Set(ByVal value As Integer)
m_expires_in = value
End Set
End Property
Private m_expires_in As String
Public Property access_token As String
Get
Return m_access_token
End Get
Set(ByVal value As String)
m_access_token = value
End Set
End Property
Private m_access_token As String
End Class
我的感觉是我的问题在我班上但我不确定。因此,在本网站和其他人Trouble parsing Json into .net Object上查找了几个小时后,我将以下代码放在一起解析信息并将其转储到RichTextBox,只是为了看看它是什么。
Dim sr As New StreamReader(req.GetResponse.GetResponseStream)
Dim authtoken As New List(Of AuthToken)()
Dim ms As New MemoryStream(System.Text.Encoding.Unicode.GetBytes(sr.ReadToEnd))
Dim serializer As New System.Runtime.Serialization.Json.DataContractJsonSerializer(authtoken.GetType)
authtoken = DirectCast(serializer.ReadObject(ms), List(Of AuthToken))
ms.Close()
ms.Dispose()
sr.Close()
sr.Dispose()
For Each token In authtoken
rtbResponse.AppendText("Token: " & token.access_token & " Expires in: " & token.expires_in)
Next
我的班级创建错误了吗?来自内存流的数据是否没有进入authtoken对象,因为该类与json数据的内容不匹配,因为它被反序列化了?
如果我正在使用“DataContractSerializer”,我是否需要在班级中拥有数据合同“东西”?
非常感谢任何帮助。
答案 0 :(得分:0)
数据没有进入authtoken变量,因为你没有auth标记列表 - 只有一个对象。因此,如果你获得那些JSON对象,那么就可以删除你的列表并按照这样做:
Dim sr As New StreamReader(req.GetResponse.GetResponseStream)
Dim authtoken As AuthToken
Dim ms As New MemoryStream(System.Text.Encoding.Unicode.GetBytes(sr.ReadToEnd))
Dim serializer As New System.Runtime.Serialization.Json.DataContractJsonSerializer(GetType(AuthToken))
authtoken = DirectCast(serializer.ReadObject(ms), AuthToken)
ms.Close()
ms.Dispose()
sr.Close()
sr.Dispose()
rtbResponse.AppendText("Token: " & authtoken.access_token & " Expires in: " & authtoken.expires_in)