Estoy tratando de deserializar algunos datos JSON en objetos para una aplicación. Hasta ahora, ha estado bien porque las propiedades en los datos JSON eran estáticas (clave con un valor). Ahora tengo un resultado donde la clave es una pieza de datos dinámica.Deserialización de JSON utilizando JSon.NET con datos dinámicos
He aquí un ejemplo de JSON url:
http://en.wikipedia.org/w/api.php?action=query&format=json&pageids=6695&prop=info
El JSON resultante de esto es:
{ "query" : { "pages" : { "6695" : { "counter" : "",
"lastrevid" : 468683764,
"length" : 8899,
"ns" : 0,
"pageid" : 6695,
"title" : "Citadel",
"touched" : "2012-01-03T19:16:16Z"
} } } }
bien, eso es genial, excepto que no puedo deserializar las "páginas" de datos en una objeto. Si tuviera que definir una clase para las páginas que tendría que tener este aspecto:
public class 6695
{
public string counter { get; set; }
public int lastrevid { get; set; }
public int length { get; set; }
public int ns { get; set; }
public int pageid { get; set; }
public string title { get; set; }
public string touched { get; set; }
}
Para deserialze el contenido (utilizando JsonConvert.Deserialize (jsondata)) y todos sabemos que no podemos tener una clase llamada 6695. No solo eso, el nombre de la clase debería ser diferente (por ejemplo, pageid = 7145 debería ser la clase 7145).
Parece que puedo sacar algunos valores si uso algo como JObject.Parse (contenido) y luego accedo a elementos como JArrays pero es bastante feo y sigo atascado tratando de sacar los datos de la matriz de páginas .
Buscando a alguien que lo ayude con esto. No creo que sea poco común, simplemente no son datos JSON con los que me he cruzado antes y no estoy seguro de cómo manejarlos.
Gracias!
¡PD se olvidó de mencionar que esto está en Windows Phone 7 por lo que "dinámico" no está disponible!
¿No sería el 6695, simplemente ser nombre de propiedad, en lugar de un nombre de clase? Sigue siendo un problema, pero quizás pueda buscar y reemplazar la propiedad numérica en algún nombre fijo. No estoy seguro de cómo Json.NET maneja esto, pero quizás puedas intentar deserializarlo como un diccionario de un tipo de objeto específico. –
Probablemente llegue un poco tarde a esta fiesta, pero newtonsoft lib tiene JObject para esto ... var obj = JObject.Parse (jsonString); básicamente trata los datos como un diccionario anidado complejo similar a cómo se comporta JavaScript en el navegador. Usted recupera una instancia de un "JObject" que le permite acceder a todo utilizando sintaxis de matriz, por ejemplo: var page = obj ["pages"] ["6695"] – War