Estoy tratando de analizar un poco de JSON usando la biblioteca JSon.Net. La documentación parece un poco escasa y estoy confundido sobre cómo lograr lo que necesito. Aquí está el formato para el JSON que necesito analizar.
{
"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
}
} ]
}
Los únicos datos que realmente necesito de esto son las cosas en la matriz de objetos. ¿Es posible para mí analizar eso con algo como JSonTextReader y simplemente extraer las cosas que quiero, como OBJECT_TYPE y la posición xey? Parece que no puedo ponerme JSonTextReader
a trabajar como quiero y encuentro pocos o ningún ejemplo de uso.
Parece que serializar primero y luego usar LINQ con mi objeto sería ideal y cada ejemplo que encuentro analiza la serialización del JSON primero, pero no estoy seguro de cómo construiría un objeto para esta estructura. En particular, la matriz de objetos, que debería ser algo así como una lista de pares de objetos de atributo y posición. No tengo idea de cómo codificaría mi objeto para que JSon.Net supiera cómo serializarlo.
Pensé que podría escribir mi propio analizador simple para extraer todo lo que necesito en un objeto de atributos que creé, pero estoy teniendo poca suerte.
Con suerte, todo esto tiene sentido, ¿alguna idea?
fuente
XElement
que me permita usar LINQ en los objetos JSON?Editar: Gracias Marc, lee sobre el problema de estructura vs clase y tienes razón, ¡gracias!
Tiendo a usar el siguiente método para hacer lo que describe, usando un método estático de JSon.Net:
Enlace: serializar y deserializar JSON con Json.NET
Para la lista de Objetos, puedo sugerir el uso de listas genéricas hechas con tu propia clase pequeña que contiene
attributes
yposition
clase. Puede usar laPoint
estructura enSystem.Drawing
(System.Drawing.Point
oSystem.Drawing.PointF
para números de punto flotante) para usted X e Y.Después de la creación del objeto, es mucho más fácil obtener los datos que busca en comparación con el análisis de texto que de otro modo estaría viendo.
fuente
(Esta pregunta apareció en un lugar destacado en el resultado de un motor de búsqueda, pero terminé usando un enfoque diferente. Agregué una respuesta a esta pregunta anterior en caso de que otras personas con preguntas similares leyeran esto)
Puede resolver esto con Json.Net y crear un método de extensión para manejar los elementos que desea repetir:
Y luego acceda a los datos de esta manera: (escenario: escribiendo en la consola):
fuente
fuente
[
o]
(delimitando estructuras de matriz o lista).Usas la
JSON
clase y luego llamas a laGetData()
función.fuente