2014-10-17 51 views
1

我有一些JSON然後解析爲JArray對象。我想過濾JArray,因此它只有兩個屬性Title和BodyText。但是無論我嘗試什麼,我只能使用LINQ選擇一個值。NewtonSoft JArray - 如何使用LINQ選擇多個元素

[HttpGet] 
public JsonResult AjaxGetNewsItems() 
{ 
    string json = JsonConvert.SerializeObject(news.GetNewsItems(), formatting:Formatting.Indented); 
    var v = JArray.Parse(json); 

    //var items = 
    // v.Where(
    //  x => 
    //   x["Title"].ToString() != string.Empty && 
    //   x["BodyText"].ToString() != string.Empty) 
    //  .Select(x => x["Title"]) 
    //  .ToList(); 

    var title = (string) v[0]["Title"]; 

    var titleBodytext = from p in v 
    select v[0]["Title"]["BodyText"]; 
    foreach (var item in titleBodytext) 
    { 
    } 
    //var titleBodytext = 
    // from c in v[0]["Title"]["BodyText"] 
    // group c by c 
    // into g 
    // select new { }; 

    //JArray a = JArray.FromObject(news.GetNewsItems()); 
    //string titleBodytext = (string) newsItems["Title"]["Bodytext"]; 

    return new JsonResult() 
    { 
     Data = json, 
     JsonRequestBehavior = JsonRequestBehavior.AllowGet, 
     MaxJsonLength = Int32.MaxValue 
    }; 
} 

我想改變這種代碼:

var titleBodytext = from p in v 
        select v[0]["Title"]["BodyText"]; 

TitleBodyText在我JArray兩個鍵的值。 JArray對象的

enter image description here

見截圖。在元素0中存在關鍵值元素。

+0

試試這個'var titleBodytext = from p in v select new {Title = p [0] [「title」],Body = p [0] [「bodyText」]' – 2014-10-17 11:10:07

+0

@Thirisangu我現在就試一試。所以我想將它投影到令人討厭的收藏中? – 2014-10-17 11:14:53

+0

@Thirisangu我有這個錯誤:其他信息:訪問JObject值與無效鍵值:0.預期的對象屬性名稱。 – 2014-10-17 11:19:16

回答

4

試試這個方法:

var titleBodytext = from p in v 
        select new 
          { 
          Title = (string)p["Title"], 
          Text = (string)p["BodyText"] 
          }; 

或者,如果你確定v總是隻包含一個元素:

var titleBodytext = new 
        { 
         Title = (string)v[0]["Title"], 
         Text = (string)v[0]["BodyText"] 
        }; 

順便說一句,你目前的代碼不會似乎做你的想法。它在from子句中有p in v,但始終選擇v[0],而不管當前p是上下文。無論如何,在v只包含一個元素的情況下,這不會顯示錯誤的行爲。

+0

謝謝你的代碼工作。我不太確定我做錯了什麼。也許我不需要索引?我經常使用LINQ,它從來沒有這麼麻煩。 – 2014-10-17 11:48:45

+0

@nickgowdy是的,你不需要索引,更重要的是你需要在'select'子句中使用'p'而不是'v'。 – har07 2014-10-17 11:51:54

+0

@ hara07好吧,我明白爲什麼它不起作用。謝謝你的幫助。 – 2014-10-17 13:08:05