CONSULTANDO ITENS DE UMA JSON

ROOT1990 29/02/2016 21:05:57
#458417
Boa Noite Gente.

Estou com um problema que esta paralizando meu projeto, preciso ler os itens de uma json.
[{
[Ô]tabelaPrecoId[Ô]:6988,
[Ô]representadaId[Ô]:3360,
[Ô]planoPagamentoId[Ô]:5104,
[Ô]clienteId[Ô]:18117,
[Ô]dataEdicao[Ô]:[Ô]2016-02-27T14:30:42-03:00[Ô],
[Ô]dataEmissao[Ô]:[Ô]27/02/2016[Ô],
[Ô]dataEntrega[Ô]:[Ô][Ô],
[Ô]desconto1[Ô]:0.00,
[Ô]desconto2[Ô]:0.00,
[Ô]desconto3[Ô]:0.00,
[Ô]id[Ô]:36258,
[Ô]itemPedidoList[Ô]:
[{
[Ô]produtoId[Ô]:113552,
[Ô]desconto[Ô]:0.00,
[Ô]id[Ô]:285440,
[Ô]precoUnitario[Ô]:34.00,
[Ô]quantidade[Ô]:1.00
}],
[Ô]numero[Ô]:7,
[Ô]observacoes[Ô]:[Ô][Ô],
[Ô]ordemCompra[Ô]:[Ô][Ô],
[Ô]situacao[Ô]:[Ô]Em carteira[Ô],
[Ô]totalBruto[Ô]:34.00,
[Ô]totalLiquido[Ô]:34.00,
[Ô]vendedorId[Ô]:-1,
[Ô]versao[Ô]:1
}]

a parte principal eu consigo ler sem problema mas não consigo entrar no array itemPedidoList, como eu posso fazer isso ?
segue parte do meu codigo.


Private sub consulta
Dim baseUri As New Uri([Ô]http://pedidomobile.com[Ô])
Dim myUri As New Uri(baseUri, [Ô]webservice2/webresources/pedido[Ô])
Dim html As String = cliente.DownloadString(New Uri(myUri.ToString))
Dim jsonString As String = html
MsgBox(html)
txtvendas.Text = html

[ô]IO.File.ReadAllText(consulta)
Dim myJsonTool As New JavaScriptSerializer
Dim pedidos As List(Of pedidosweb) = myJsonTool.Deserialize(Of List(Of pedidosweb))(jsonString)


bsMyData.DataSource = pedidos
dgvitens.DataSource = bsMyData
end sub

Public Class pedidosweb
Public Property id As String
Public Property numero As String
Public Property observacoes As String
Public Property situacao As String
Public Property vendedorid As String
Public itemPedidoList
Public Property produtoId As String
Public Property desconto As String

End Class

meu conhecimento não e tao grande qualquer ajuda será muito bem vinda.

desde já Obrigado a Todos.
KERPLUNK 29/02/2016 23:00:23
#458421
Seu código parece estar correto, apesar de eu não aconselhar usar um JavaScriptSerializer, mas sim um DataContractJsonSerializer... qual sua dificuldade?
ROOT1990 01/03/2016 01:16:14
#458429
Citação:

:
Seu código parece estar correto, apesar de eu não aconselhar usar um JavaScriptSerializer, mas sim um DataContractJsonSerializer... qual sua dificuldade?


Obrigado pelo apoio kerplunk
então meu problema está em entrar nesta parte do json
[{
[Ô]produtoId[Ô]:113552,
[Ô]desconto[Ô]:0.00,
[Ô]id[Ô]:285440,
[Ô]precoUnitario[Ô]:34.00,
[Ô]quantidade[Ô]:1.00
}],

já tentei de tudo não estou conseguindo, eu preciso levar isso para o grid, mas não está dando certo,
tendo em vista que serão mais de um item para o pedido o pedido irá se repetir devido a quantidade de itens ou um grid para pedidos ou outro para itens.
KERPLUNK 01/03/2016 01:48:00
#458430
Se a variável [Ô]pedidos[Ô] está desserializada, então o que você quer é pedidos.itemPedidoList
ROOT1990 01/03/2016 02:27:54
#458431
Fiz o teste aqui porem não reconheceu
como valido
segue trecho do codigo

Dim myJsonTool As New JavaScriptSerializer
Dim pedidos As List(Of pedidosweb) = myJsonTool.Deserialize(Of List(Of pedidosweb))(jsonString)

bsMyData.DataSource = pedidos.itemPedidoList()
dgvitens.DataSource = bsMyData
KERPLUNK 01/03/2016 02:33:00
#458432
Você sabe usar a Watch window? Simplesmente adicione o objeto [Ô]pedidos[Ô] e veja...
ROOT1990 01/03/2016 08:27:40
#458437
Bom Dia.

quando eu utilizo o watch
na variavel pedidos.itemPedidoList eu tenho [ô]itemPedidoList[ô] is not a member of [ô]System.Collections.Generic.List(Of Integraçãocontrol.Principal.pedidosweb)[ô].
e somente pedido recebo Count = 1
OCELOT 01/03/2016 10:49:55
#458451
Resposta escolhida
Você fez tudo certo, só faltou criar uma classe pro item do pedido e declarar ele corretamente na sua classe pedidoweb
Public Class pedidosweb
[ô]propriedades aqui, removi elas só para ficar menor no exemplo
Public itemPedidoList As List(Of itempedido)
[ô]outras propriedades aqui
End Class

Public Class itempedido
Public Property produtoId As Integer
Public Property desconto As Single
Public Property id As Integer
Public Property precoUnitario As Single
Public Property quantidade As Single
End Class
ROOT1990 01/03/2016 11:22:10
#458454
Então, fiz desta forma segue meu codigo

Citação:

Private Sub consulta_todos_pedidos()
Dim cliente As New WebClient
cliente.Headers.Add([Ô]Authorization[Ô], [Ô]Basic [Ô] +
Convert.ToBase64String(Encoding.ASCII.GetBytes([Ô]fernandofariabrito@gmail.com:xxxxxxxxx[Ô])))
cliente.Encoding = System.Text.Encoding.GetEncoding([Ô]utf-8[Ô])

Dim baseUri As New Uri([Ô]http://xxxxxx.com[Ô])
Dim myUri As New Uri(baseUri, [Ô]webservice2/webresources/pedido[Ô])
Dim html As String = cliente.DownloadString(New Uri(myUri.ToString))
Dim jsonString As String = html
MsgBox(html)


Dim myJsonTool As New JavaScriptSerializer
Dim pedidos As List(Of pedidosweb) = myJsonTool.Deserialize(Of List(Of pedidosweb))(jsonString)


bsMyData.DataSource = pedidos
dgvitens.DataSource = bsMyData

End Sub


Public Class pedidosweb

Public Property id As String
Public Property numero As String
Public Property observacoes As String
Public Property situacao As String
Public Property vendedorid As String
Public Property produtoId As String
Public Property desconto As String
Public itemPedidoList As List(Of itempedido)
End Class

Public Class itempedido
Public Property produtoId As Integer
Public Property desconto As Single
Public Property id As Integer
Public Property precoUnitario As Single
Public Property quantidade As Single
End Class





pelo que eu entendi desculpe se estiver falando besteira mas no data source do datagrid dos itens deve entrar .datasource = pedidos.itempedidolist correto ?
ainda sim o itempedidolist não e reconhecido como parametro.
no watch aparece assim:
pedidos.itempedido() [ô]itempedido[ô] is not a member of [ô]System.Collections.Generic.List(Of Integraçãocontrol.Principal.pedidosweb)[ô].
itempedido [ô]itempedido[ô] is a type and cannot be used as an expression.
pedidosweb.itempedidolist Reference to a non-shared member requires an object reference.
pedidosweb.Itempedido [ô]Itempedido[ô] is not a member of [ô]Integraçãocontrol.Principal.pedidosweb[ô].

Muito obrigado pela ajuda
OCELOT 01/03/2016 12:05:52
#458461
Acho que você está adicionando coisa errada no Watch, o que você consegue adicionar lá é sua variável [Ô]pedidos[Ô], ela deve aparecer e você deve conseguir inspecionar ela, expandindo você deve conseguir ver o itempedido.

Qualquer outra coisa deve ser algum código válido, como a variável pedidos é um list, você precisaria colocar da mesma forma como se acessaria um item em um list, por exemplo para pegar o primeiro item seria
pedidos(0)

Para pegar a lista de itens
pedidos(0).itemPedidoList

Se eu quiser pegar o primeiro item da lista itemPedidoList é a mesma coisa
pedidos(0).itemPedidoList(0)


Então eu não sei como vai funcionar exatamente os dados que você pega, mas ele basicamente está te dando uma lista de pedidos e cada uma delas possui uma lista de itens, acontece de no seu exemplo ter apenas um pedido com um item na lista dele
ROOT1990 01/03/2016 13:18:18
#458464
Entendiiii acho que encontrei meu problema, muito Obrigado.
ainda não vou encerrar o topico porque ainda não testei mas assim que testar aqui eu retorno com a solução. obrigado a todos pelo apoio.
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas