我有一些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中有键值元素。
答案 0 :(得分: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"]
};
顺便说一下,你现在的代码似乎并不像你想的那么做。它在p in v
子句中有from
,但无论当前v[0]
是上下文,都始终选择p
。无论如何,在v
只包含一个元素的情况下,这并没有表现出错误的行为。