使用VB.NET解析简单JSON

时间:2013-12-04 23:25:37

标签: json vb.net parsing datacontractserializer cisco

我有一个简单的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”,我是否需要在班级中拥有数据合同“东西”?

非常感谢任何帮助。

1 个答案:

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