VB - Newtonsoft.Json Валютная программа Неожиданный символ "{." ошибка
Я пытаюсь создать основанную на API онлайн-валютную программу для School Project. Я сделал это, но я пытаюсь построить более функциональную программу, поэтому я решил добавить в программу вторую форму окна. Эта вторая форма делает обмен валюты в прошлом времени. API, который я использовал в своем проекте, может сделать это, так что это возможно, но в VB, когда я пытаюсь получить названия валют в словаре, я получаю ошибку, подобную этой:
'Newtonsoft.Json.JsonReaderException' türünde bir yakalanamayan özel durum, Newtonsoft.Json.dll öğesinde oluştu При обработке значения: {. Путь "ставки", строка 1, позиция 43.
И это мой код:
Dim rawResp As String
Dim request As HttpWebRequest
Dim response As HttpWebResponse = Nothing
Dim reader As StreamReader
Dim jsonResultToDict As Dictionary(Of String, String)
Dim kurlar As String
Dim kur As Object
Dim kurs As String
request = DirectCast(WebRequest.Create("http://api.fixer.io/" + DateTimePicker1.Value.ToString("yyyy-MM-dd")), HttpWebRequest)
response = DirectCast(request.GetResponse(), HttpWebResponse)
reader = New StreamReader(response.GetResponseStream())
rawResp = reader.ReadToEnd
jsonResultToDict = JsonConvert.DeserializeObject(Of Dictionary(Of String, String))(rawResp)
kurlar = jsonResultToDict.Item("rates")
kur = JObject.Parse(kurlar)
Между прочим, я еще не пытался задавать названия валют в выпадающем списке, потому что пока не мог получить данные.
Это API: http://fixer.io/
Спасибо за помощь...
1 ответ
Я думаю, что из-за того, что данные json для "курсов" не вписываются в модель словаря "String, String", Newtonsoft JSON не может конвертировать из "String, Single" (обратите внимание, что код валюты указан в двойных кавычках, а скорость не). Итак, вам нужно создать объект класса, который можно легко преобразовать из JSON.
Например, класс может выглядеть так:
Public Class ForExRates
Public base As String
Public [date] As String 'enclose var in brackets; Date is a VB keyword.
Public rates as Dictionary(Of String, Single)
Public Sub New()
End Sub
End Class
Затем замените любую ссылку для словаря (Of String, String) на ForExRates.
Итак, ваш код должен выглядеть так:
Dim rawResp As String Dim request As HttpWebRequest Dim response As HttpWebResponse = Nothing Dim reader As StreamReader Dim objForExRates As ForExRates request = DirectCast(WebRequest.Create("http://api.fixer.io/" + DateTimePicker1.Value.ToString("yyyy-MM-dd")), HttpWebRequest) response = DirectCast(request.GetResponse(), HttpWebResponse) reader = New StreamReader(response.GetResponseStream()) rawResp = reader.ReadToEnd objForExRates = JsonConvert.DeserializeObject(Of ForExRates)(rawResp) Dim sCAD As String = "Rate for 'CAD': " + objForExRates.rates("CAD").ToString()