Sto tentando di deserializzare alcuni dati JSON in oggetti per un'applicazione. Fino ad ora è andato tutto bene perché le proprietà sui dati JSON erano statiche (chiave con un valore). Ora ho un risultato in cui la chiave è un dato dinamico.Deserializzazione JSON utilizzando JSon.NET con dati dinamici
Ecco un esempio JSON url:
http://en.wikipedia.org/w/api.php?action=query&format=json&pageids=6695&prop=info
La risultante JSON per questo è:
{ "query" : { "pages" : { "6695" : { "counter" : "",
"lastrevid" : 468683764,
"length" : 8899,
"ns" : 0,
"pageid" : 6695,
"title" : "Citadel",
"touched" : "2012-01-03T19:16:16Z"
} } } }
Okay, questo è ottimo, tranne che non posso deserializzare le "pagine" di dati in un oggetto. Se dovessi definire una classe per le pagine che avrebbe dovuto assomigliare a questo:
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; }
}
Per deserialze i contenuti (utilizzando JsonConvert.Deserialize (jsondata)) e tutti sappiamo che non possiamo avere una classe chiamata 6695. Non solo, il nome della classe dovrebbe essere diverso (ad esempio pageid = 7145 dovrebbe essere la classe 7145).
Posso sembrare strappare alcuni valori se utilizzo qualcosa come JObject.Parse (contenuto) e quindi accedere agli elementi come JArray ma è piuttosto brutto e sono ancora bloccato nel tentativo di estrarre i dati dall'array delle pagine .
Alla ricerca di qualcuno per aiutare con questo. Non penso che sia raro, non sono solo i dati JSON che ho incontrato prima e non sono sicuro di come gestirlo.
Grazie!
PS dimenticato di menzionare questo è su Windows Phone 7 così "dinamico" non è disponibile!
Non sarebbe il 6695, solo essere nome della proprietà, piuttosto che un nome di classe? Ancora un problema, ma forse puoi fare ricerca e sostituzione della proprietà numerica in un nome fisso. Non sono sicuro di come Json.NET gestisca ciò ma forse puoi provare a deserializzare come dizionario di un tipo di oggetto specifico? –
Probabilmente sono un po 'in ritardo per questa festa, ma la libreria newtonsoft ha JObject per questo ... var obj = JObject.Parse (jsonString); fondamentalmente tratta i dati come un complesso dizionario annidato simile a come si comporta JavaScript nel browser. Si ottiene un'istanza di un "JObject" che consente di accedere a tutto utilizzando la sintassi dell'array, ad esempio: var page = obj ["pages"] ["6695"] – War