2013-04-19 12 views
14

Sto analizzando una stringa JSON utilizzando NewtonSoft JObject. Come posso ottenere i valori da un oggetto dinamico a livello di programmazione? Voglio semplificare il codice per non ripetermi per ogni oggetto.Come ottenere proprietà da JObject dinamico al livello di programmazione

public ExampleObject GetExampleObject(string jsonString) 
{ 
ExampleObject returnObject = new ExampleObject(); 
dynamic dynamicResult = JObject.Parse(jsonString); 
if (!ReferenceEquals(dynamicResult.album, null)) 
    { 
     //code block to extract to another method if possible 
     returnObject.Id = dynamicResult.album.id; 
     returnObject.Name = dynamicResult.album.name; 
     returnObject.Description = dynamicResult.albumsdescription; 
     //etc.. 
    } 
else if(!ReferenceEquals(dynamicResult.photo, null)) 
    { 
     //duplicated here 
     returnObject.Id = dynamicResult.photo.id; 
     returnObject.Name = dynamicResult.photo.name; 
     returnObject.Description = dynamicResult.photo.description; 
     //etc.. 
    } 
else if.. 
//etc.. 

return returnObject; 
} 

C'è un modo per estrarre i blocchi di codice in "se" dichiarazioni a un metodo per esempio separata:

private void ExampleObject GetExampleObject([string of desired type goes here? album/photo/etc]) 
{ 
    ExampleObject returnObject = new ExampleObject(); 
    returnObject.Id = dynamicResult.[something goes here?].id; 
    returnObject.Name = dynamicResult.[something goes here?].name; 
    //etc.. 
    return returnObject; 
} 

E 'anche possibile dal momento che non possono utilizzare la riflessione per gli oggetti dinamici . O sto persino usando correttamente il JObject?

Grazie.

+1

È il jsonString una stringa che è sotto il vostro controllo? Oppure stai ricevendo questo da un'altra parte e hai bisogno di comunicare con esso? – MichaelD

+0

@ Michael è di un'altra festa. Sto solo ricevendo e analizzando. – dcdroid

+0

Altre risposte vedi [deserializzare JSON su .net object usando NewtonSoft (o linq to json forse?)] (Http://stackoverflow.com/q/4749639) –

risposta

23

Supponendo che si stia utilizzando Newtonsoft.Json.Linq.JObject, non è necessario utilizzare dinamico. La classe jobject può prendere un indicizzatore di stringa, proprio come un dizionario:

JObject myResult = GetMyResult(); 
returnObject.Id = myResult["string here"]["id"]; 

Spero che questo aiuti!

+6

Cosa succede in '[" stringa qui "]'? "Id" non restituirebbe semplicemente il valore dell'ID nell'oggetto? – joelforsyth

+0

In questo caso non è sensibile? – mardok

0

con parola chiave dynamic come di seguito:

var x = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result); 
Problemi correlati