NewtonSoft JArray - 如何使用LINQ选择多个元素
我有一些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"];
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
只包含一个元素的情况下,这不会显示错误的行为。
谢谢你的代码工作。我不太确定我做错了什么。也许我不需要索引?我经常使用LINQ,它从来没有这么麻烦。 – 2014-10-17 11:48:45
@nickgowdy是的,你不需要索引,更重要的是你需要在'select'子句中使用'p'而不是'v'。 – har07 2014-10-17 11:51:54
@ hara07好吧,我明白为什么它不起作用。谢谢你的帮助。 – 2014-10-17 13:08:05
试试这个'var titleBodytext = from p in v select new {Title = p [0] [“title”],Body = p [0] [“bodyText”]' – 2014-10-17 11:10:07
@Thirisangu我现在就试一试。所以我想将它投影到令人讨厌的收藏中? – 2014-10-17 11:14:53
@Thirisangu我有这个错误:其他信息:访问JObject值与无效键值:0.预期的对象属性名称。 – 2014-10-17 11:19:16