2011-04-01 3 views
0

올바른 LINQ 구문을 작성하는 데 문제가 있습니다. 이전에는 JSON 파일에 사용한 적이 있지만 결코 사용하지 않았습니다. 여기 및 다른 사이트에서 찾은 예제를 검색하고 실험하여 다음 코드를 만들었습니다. 나는 내가 가까이에 있다고 생각하지만 그것을 이해하는 것처럼 보일 수 없다. 저는 Newtonsoft.Json과 Newtonsoft.Json.Linq에 대한 참조와 함께 vs2010 C# targeting .net 4를 사용하고 있습니다.LINQ - JSON 도움이 필요합니다.

이 파일에서 from.number와 body를 가져올 수 있어야합니다.

{ "메시지": { "을": { "NUM": "7891234567", "이름": "신원 미상" }, "몸": "안녕하세요", "에서 ": { "NUM ":"1231234567 ", "이름 ":"홍길동 " }, "유형 ": 0, "날짜 _ 시간 ": 1301493974000 } }

 var jObj = JObject.Parse(jFile); 

     var pNum = from msg in jObj["message"]["from"].Children()      
        select (string)msg; 

     foreach(var n in pNum) 
     { 
      Console.WriteLine(n); 
     } 

다음은 bove 코드는 from.num 값과 from.name 값을 인쇄합니다. 나는 num 값만을 찾고있다. 내가 원하는 가치를 어떻게 분리 할 지 잘 모르겠다.

내가 시도 ...... 성공하지

 select (string)msg["num"]; 

. "Newtonsoft.Json.Linq.JProperty에서 자식 값에 액세스 할 수 없습니다."라는 오류 메시지가 나타납니다. 본문 값을 가져 오는 쿼리가 필요합니다.

덕분에, 제프

답변

2

이 작동합니다 :

string json = "{ \"message\": { \"to\": { \"num\": \"7891234567\", \"name\": \"Jane Doe\" }, \"body\": \"Hello\", \"from\": { \"num\": \"1231234567\", \"name\": \"John Doe\" }, \"type\": 0, \"dateTime\": 1301493974000 } }"; 

JavaScriptSerializer js = new JavaScriptSerializer(); 
dynamic foo = js.Deserialize<dynamic>(json); 
var message = new {Num = foo["message"]["from"]["num"], Body = foo["message"]["body"]}; 

Console.WriteLine("{0}: {1}", message.Num, message.Body); 
Console.ReadLine(); 

을 참고로 나는 JavaScriptSerializer가 System.Web.Extensions 어셈블리에 있음을 추가해야합니다.

+1

JavaScriptSerializer에 대한 참조를 추가 할 수 없습니다. .NET 4 Framework (클라이언트가 아님)을 대상으로하므로 해당 답변을 검색하고 있습니다. 당신의 아이디어에 감사드립니다. 나는 빨리 시험 할 것이다. – Jkulp

+0

완벽하게 작동합니다! – Jkulp

0

내가이와 함께 제공된 설명서를보고이에게 자신을 시도하는 설정이 없습니다. 다음과 같은 경우 시도해 볼 수 있습니까?

var pNum = from msg in jObj["message"]["from"] 
       select (string)msg.SelectToken("num"); 
+0

pNum을 인쇄 할 때 두 개의 null 값을 얻습니다. – Jkulp

관련 문제