2013-04-19 9 views
14

NewtonSoft JObject kullanarak JSON dizesini ayrıştırma yapıyorum. Dinamik bir nesneden nasıl programlı olarak değerler alabilirim? Her nesne için kendimi tekrar etmemesi için kodu basitleştirmek istiyorum.Dinamik JObject özellikli özellik nasıl edinilir

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

ben kod bloklarını ayıklamak herhangi bir yolu var mı ayrı bir yöntem örneğin ifadelerini "eğer":

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

Hatta mümkün biz dinamik nesneler için yansıma kullanamazsınız beri . Yoksa JObject'i doğru kullanıyorum mı?

Teşekkürler.

+1

jsonString sizin kontrolünüz altında olan bir dize var mı? Yoksa bunu başka bir partiden mi alıyorsunuz ve onunla iletişim kurmanız mı gerekiyor? – MichaelD

+0

@MichaelD başka bir partiden. Sadece alıp ayrışıyorum. – dcdroid

+0

Daha fazla yanıt [bkz. JSS için JSON'u .soft nesnesini kullanarak (veya belki de linson'a belki?)] (Http://stackoverflow.com/q/4749639) –

cevap

23

Newtonsoft.Json.Linq.JObject'i kullandığınızı varsayarak, dinamik kullanmanız gerekmez. JObject sınıfı sadece bir sözlük gibi, bir dize Dizin alabilir:

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

Umut bu yardımcı olur! Dinamik anahtar kelime gibi aşağıda ile

+6

[[string string here]] 'ne yazıyor? "Id", sadece nesne içindeki ID değerini döndürmez mi? – joelforsyth

+0

Bu durum duyarsız mı? – mardok

0

:

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