title: Parse JSON using JSON.NET VB.NET
body: <p>I am trying to parse some JSON using JSON.NET; however, it is not something I am familiar with, and I am struggling to deserialize it.</p>
  
  <p>This is the JSON:</p>
  
  <pre><code>{
    "disclaimer": "use at own risk",
    "license": "testing",
    "timestamp": 1391770861,
    "base": "USD",
    "rates": {
      "AED": 3.672839,
      "AFN": 56.367,
      "ALL": 103.5113,
      "AMD": 412.35,
      "ANG": 1.78894,
      "AOA": 97.608324,
      "ARS": 7.880804,
      "AUD": 1.117779,
      "AWG": 1.789825,
      "AZN": 0.784133,
      "BAM": 1.442736,
      "BBD": 2
    }
  }
  </code></pre>
  
  <p>And here is my code currently:</p>
  
  <pre><code>Public Sub ParseJSON()
      JSONResponse = String.Empty
      Dim request As HttpWebRequest = DirectCast(HttpWebRequest.Create(LatestURL), HttpWebRequest)
      request.ContentType = "application/json; charset=utf-8"
      request.Accept = "application/json, text/javascript, */*"
      request.Method = "POST"
      Using writer As New StreamWriter(request.GetRequestStream())
          writer.Write("{id : 'test'}")
      End Using
  
      Dim response As WebResponse = request.GetResponse()
      Dim stream As Stream = response.GetResponseStream()
  
      Using StreamReader As New StreamReader(stream)
          While Not StreamReader.EndOfStream
              JSONResponse += StreamReader.ReadLine()
          End While
      End Using
  
      Dim RateReply = JsonConvert.DeserializeObject(Of RateReply)(JSONResponse)
  End Sub
  
  Public Class RateReply
      Public rates As IList(Of Rate)
      Public base As String
      Public timeStamp As Integer
      Public license As String
      Public disclaimer As String
  
      Public Sub New()
          rates = New List(Of Rate)()
      End Sub
  End Class
  
  Public Class Rate
      Public Currency As String
      Public Rate As Decimal
  End Class
  </code></pre>
  
  <p>The exception I am currently getting is:</p>
  
  <blockquote>
    <p>Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.IList`1[KTMOM.Tests.Rate]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
    To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.</p>
  </blockquote>
  
  <p>I believe this to be because the rates are not defined as an array in the JSON, however, I do not know how to resolve this.</p>
  
  <p>Any help would be greatly appreciated.</p>