2012-10-14 3 views
2

linq에 관해서는 약간 초보자이며 json.net을 사용하여 json 피드를 구문 분석하는 사이트에서 작업하고 있습니다. 내가 가지고있는 문제는 json 피드에서 여러 필드를 가져 와서 foreach 블록에 사용할 수 있어야한다는 것입니다. json.net의 문서에는 필드 하나만 가져 오는 방법 만 나와 있습니다. linq 설명서를 체크 아웃 한 후 몇 가지 변형을 수행했지만 가장 잘 작동하는 것을 찾지 못했습니다. 여기에 지금까지있어 무엇?JSON.Net 및 Linq

WebResponse objResponse; 
    WebRequest objRequest = HttpWebRequest.Create(url); 
    objResponse = objRequest.GetResponse(); 
    using (StreamReader reader = new StreamReader(objResponse.GetResponseStream())) 
    { 
     string json = reader.ReadToEnd(); 
     JObject rss = JObject.Parse(json); 

     var postTitles = 
      from p in rss["feedArray"].Children() 
      select (string)p["item"], 
      //These are the fields I need to also query 
      //(string)p["title"], (string)p["message"]; 

     //I've also tried this with console.write and labeling the field indicies for each pulled field 
     foreach (var item in postTitles) 
     { 
      lbl_slides.Text += "<div class='slide'><div class='slide_inner'><div class='slide_box'><div class='slide_content'></div><!-- slide content --></div><!-- slide box --></div><div class='rotator_photo'><img src='" + item + "' alt='' /></div><!-- rotator photo --></div><!-- slide -->"; 
     } 
    } 

는 사람이 JSON 피드에서 여러 필드를 끌어와 foreach는 블록의 일부 (또는 이와 유사한로 사용하는 방법을 본 사람

답변

2

당신은 할 수 없습니다 그냥 아래 foreach 루프에서 필드를 참조하십시오 (아래)? 정말 linq 쿼리를 여기에 필요가 있는지 모르겠습니다. (참고,이 예제의 명확성을 위해 대부분의 html 밖으로 잘라. 참고. 실제 프로젝트에 맞게 조정, 적절한 HTML 이스케이프 처리 등)

foreach (var p in rss["feedArray"].Children()) 
{ 
    lbl_slides.Text += string.Format(
     "<img src='{0}' title='{1}'/><span>{2}</span>", 
     (string)p["item"], 
     (string)p["title"], 
     (string)p["message"]); 
} 

같은 linq을 사용하면 다음과 같이 표시됩니다.

var postTitles = 
    from p in rss["feedArray"].Children() 
    select new 
    { 
     Src = (string)p["item"], 
     Title = (string)p["title"], 
     Message = (string)p["message"], 
    } 

foreach (var item in postTitles) 
{ 
    lbl_slides.Text += string.Format(
     "<img src='{0}' title='{1}'/><span>{2}</span>", 
     item.Src, item.Title, item.Message); 
} 
+0

감사합니다. – johngeek