我有一些 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
,但始终选择 v[0]
,无论当前 p
是什么上下文。无论如何,在 v
仅包含一个元素的情况下,这不会显示错误的行为。
关于c# - NewtonSoft JArray - 如何使用 LINQ 选择多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26423398/