2013-04-19 37 views
14

Tôi đang phân tích chuỗi JSON bằng NewtonSoft JObject. Làm cách nào để nhận các giá trị từ một đối tượng động theo lập trình? Tôi muốn đơn giản hóa mã để không lặp lại bản thân mình cho mọi đối tượng.Cách lấy thuộc tính từ JObject động lập trình

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ó cách nào tôi có thể trích xuất các khối mã trong "nếu" báo cáo đến một phương pháp riêng biệt ví dụ:

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

Là nó thậm chí có thể vì chúng ta không thể sử dụng phản ánh các đối tượng năng động . Hoặc tôi thậm chí sử dụng JObject một cách chính xác?

Cảm ơn.

+1

Là jsonString một chuỗi đó là dưới sự kiểm soát của bạn? Hay bạn nhận được điều này từ một bên khác và bạn cần liên lạc với nó? – MichaelD

+0

@MichaelD là từ một bên khác. Tôi chỉ nhận và phân tích cú pháp. – dcdroid

+0

Câu trả lời khác xem [deserializing JSON thành đối tượng .net sử dụng NewtonSoft (hoặc linq to json có thể?)] (Http://stackoverflow.com/q/4749639) –

Trả lời

23

Giả sử bạn đang sử dụng Newtonsoft.Json.Linq.JObject, bạn không cần phải sử dụng động. Lớp JObject có thể lấy một trình chỉ mục chuỗi, giống như từ điển:

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

Hy vọng điều này sẽ hữu ích!

+6

Điều gì xảy ra trong '[" string here "]'? Sẽ không "id" chỉ trả về giá trị của ID trong đối tượng? – joelforsyth

+0

Trường hợp này có nhạy cảm không? – mardok

0

với từ khoá động như dưới đây:

var x = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result); 
Các vấn đề liên quan