[英]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"];
Title
和BodyText
是我的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.