Estou tentando analisar alguns JSON usando a biblioteca JSon.Net. A documentação parece um pouco esparsa e estou confuso sobre como realizar o que preciso. Aqui está o formato do JSON que preciso analisar.
{
"displayFieldName" : "OBJECT_NAME",
"fieldAliases" : {
"OBJECT_NAME" : "OBJECT_NAME",
"OBJECT_TYPE" : "OBJECT_TYPE"
},
"positionType" : "point",
"reference" : {
"id" : 1111
},
"objects" : [ {
"attributes" : {
"OBJECT_NAME" : "test name",
"OBJECT_TYPE" : "test type"
},
"position" : {
"x" : 5,
"y" : 7
}
} ]
}
Os únicos dados de que realmente preciso são os dados da matriz de objetos. É possível analisar isso com algo como o JSonTextReader e apenas retirar as coisas que eu quero, como OBJECT_TYPE e as posições xey? Parece que não consigo JSonTextReader
trabalhar da maneira que desejo e encontro poucos ou nenhum exemplo de uso para ele.
Parece que serializar primeiro e depois usar LINQ com meu objeto seria ideal e todos os exemplos que encontro discutem a serialização do JSON primeiro, mas não tenho certeza de como construiria um objeto para essa estrutura. Particularmente a matriz de objetos que precisaria ser algo como uma lista de pares de objetos de atributo e posição. Não tenho ideia de como codificaria meu objeto para que JSon.Net soubesse como serializá-lo.
Achei que poderia escrever meu próprio analisador simples para extrair tudo o que preciso em um objeto de atributos que criei, mas estou tendo pouca sorte.
Esperançosamente, tudo isso faz sentido, alguma ideia?
fonte
XElement
que me permita usar LINQ nos objetos JSON?Edit: Obrigado Marc, leia sobre a questão da estrutura vs classe e você está certo, obrigado!
Eu tendo a usar o seguinte método para fazer o que você descreve, usando um método estático de JSon.Net:
Link: serializando e desserializando JSON com Json.NET
Para a lista de objetos, posso sugerir o uso de listas genéricas feitas de sua própria pequena classe contendo
attributes
eposition
classe. Você pode usar aPoint
estrutura emSystem.Drawing
(System.Drawing.Point
ouSystem.Drawing.PointF
para números de ponto flutuante) para você X e Y.Após a criação do objeto, é muito mais fácil obter os dados que você deseja do que a análise de texto que você está procurando.
fonte
(Esta pergunta apareceu no topo de um resultado de mecanismo de pesquisa, mas acabei usando uma abordagem diferente. Adicionando uma resposta a esta pergunta antiga no caso de outras pessoas com perguntas semelhantes lerem isso)
Você pode resolver isso com Json.Net e fazer um método de extensão para lidar com os itens que deseja fazer um loop:
Em seguida, acesse os dados como este: (cenário: gravação no console):
fonte
fonte
[
ou]
(matriz delimitadora ou estruturas de lista).Você usa a
JSON
classe e depois chama aGetData()
função.fonte