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()  
Другие вопросы по тегам