La désérialisation JSON à l'aide de JSon.NET avec des données dynamiques

Je suis en train de désérialiser certaines données JSON dans les objets d'une application. Jusqu'à présent il a été très bien parce que les propriétés sur les données JSON était statique (clé avec une valeur). Maintenant, j'ai eu un résultat où la clé est une dynamique morceau de données.

Voici un exemple JSON url:

http://en.wikipedia.org/w/api.php?action=query&format=json&pageids=6695&prop=info

L'résultant JSON est la suivante:

{ "query" : { "pages" : { "6695" : { "counter" : "",
          "lastrevid" : 468683764,
          "length" : 8899,
          "ns" : 0,
          "pageid" : 6695,
          "title" : "Citadel",
          "touched" : "2012-01-03T19:16:16Z"
        } } } }

Ok, c'est génial, sauf que je ne peux pas désérialiser les "pages" de données dans un objet. Si je devais définir une classe pour les pages, il devra ressembler à ceci:

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; }
}

Pour deserialze le contenu (à l'aide de JsonConvert.Deserialize(jsondata)) et nous savons tous que nous ne pouvons pas avoir une classe appelée 6695. Non seulement cela, le nom de la classe devrait être différente (par exemple pageid=7145 serait le 7145 classe).

Je peux paraître arracher certaines valeurs si j'utilise quelque chose comme JObject.Parse(contenu) et ensuite accéder aux éléments comme JArrays mais c'est assez moche et je suis toujours coincé à essayer de sortir les données à partir des pages de tableau.

La recherche de quelqu'un pour aider avec ceci. Je ne pense pas que c'est rare, c'est juste pas de données JSON que j'ai rencontré avant et ne savez pas comment le gérer.

Merci!

PS j'ai oublié de mentionner c'est que sur Windows Phone 7, de manière "dynamique" n'est pas disponible!

  • Ne serait pas le 6695, juste être nom de la propriété, plutôt que d'un nom de classe? Encore un problème, mais peut-être vous pouvez faire la recherche et de remplacement de la propriété numérique dans certains nom fixe. Je ne suis pas sûr de savoir comment Json.NET poignées de cela, mais peut-être que vous pouvez essayer de le désérialiser un dictionnaire d'un type d'objet spécifique?
  • Je suis sans doute un peu tard pour cette partie, mais le newtonsoft lib a JObject pour cette ... var obj = JObject.Parse(jsonString); essentiellement traite les données comme un complexe imbriquée dictionnaire similaire à la façon dont javascript se comporte dans le navigateur. Vous obtenez en retour une instance d'un "JObject" qui vous permet d'accéder à tout en utilisant la syntaxe de tableau par exemple: var page = obj["page"]["6695"]
InformationsquelleAutor Bil Simser | 2012-01-05