jonatasbm Ответов: 2

Я не могу сериализовать json


Проблемы при попытке сбора данных из веб-службы Json

Что я уже пробовал:

Всем привет, Доброе утро, извините за мой плохой английский.

Я пытаюсь собрать данные из этого Api

https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/CotacaoDolarDia(dataCotacao=@dataCotacao)?@dataCotacao=%2705-05-2020%27&$format=json&$select=cotacaoVenda[^]

В результате она возвращает мне эти ценности

{"@odata.context":"https://was-p.bcnet.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata$metadata#_CotacaoDolarDia(cotacaoVenda)","value":[{"cotacaoVenda":5.53540}]}

Мне нужно получить это значение
5.53540
Но я не могу, он всегда возвращает мне пустой или 0

мой код

Private Async Sub Teste()
        Dim Uri As String

        Uri = "https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/CotacaoDolarDia(dataCotacao=@dataCotacao)?@dataCotacao=%2705-05-2020%27&$format=json&$select=cotacaoVenda"
        Using client = New HttpClient()
            Using response = Await client.GetAsync(Uri)
                If response.IsSuccessStatusCode Then
                    Dim ProdutoJsonString = Await response.Content.ReadAsStringAsync()
                    Dim list = JsonConvert.DeserializeObject(Of value)(ProdutoJsonString)
                    MsgBox(list.cotacaoVenda)

                Else
                    MessageBox.Show("Não foi possível obter o produto : " + response.StatusCode)
                End If
            End Using
        End Using
    End Sub

Public Class value

    Public Property cotacaoVenda As Decimal

End Class


Что я могу сделать не так?
Заранее благодарю вас всех.
Жонатас Маркес

2 Ответов

Рейтинг:
13

Richard Deeming

Значение, которое вы пытаетесь десериализовать, не соответствует показанному вами JSON.

Чтобы десериализовать этот JSON, ваши классы должны выглядеть следующим образом:

Public Class Root
    <JsonProperty("@odata.context")> _
    Public Property OdataContext As Uri

    <JsonProperty("value")> _
    Public Property Value As Value()
End Class

Public Class Value
    <JsonProperty("cotacaoVenda")> _
    Public Property CotacaoVenda As Decimal
End Class
Dim list As Root = JsonConvert.DeserializeObject(Of Root)(ProdutoJsonString)

If list Is Nothing OrElse list.Value Is Nothing OrElse list.Value.Length = 0 Then
    MsgBox("Invalid JSON data returned")
Else
    MsgBox(list.Value(0).cotacaoVenda)
End


jonatasbm

Большое вам спасибо за Вашу поддержку

Рейтинг:
12

OriginalGriff

Если я передам ваш код создателю класса (например, JSON Utils: генерация C#, VB.Net, таблица SQL, Java и PHP из JSON[^]) Я не получаю такого ограниченного класса, как я ожидал бы:

Public Class Value
       Public Property cotacaoVenda As Double
   End Class

   Public Class Example
       Public Property @odata.context As String
       Public Property value As Value()
   End Class

А потом доступ list.value(0).cotacaoVenda дать мне 5.5354


jonatasbm

Большое вам спасибо за Вашу поддержку

OriginalGriff

Всегда пожалуйста!