簡體   English   中英

NewtonSoft JArray-如何使用LINQ選擇多個元素

[英]NewtonSoft JArray - how to select multiple elements with LINQ

我有一些JSON,然后將其解析為JArray對象。 我想過濾JArray,以便它只有兩個屬性,Title和BodyText。 但是無論如何,我只能使用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對象的屏幕快照。 在元素0中,有鍵值元素。

嘗試這種方式:

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中有p in v ,但無論當前p是上下文如何,始終選擇v[0] 無論如何,在v僅包含一個元素的情況下,這不會顯示錯誤的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM