c# - NewtonSoft JArray - 如何使用 LINQ 选择多个元素

标签 c# arrays json linq json.net

我有一些 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 中的两个键值。

enter image description here

查看 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/

相关文章:

c# - 多行文本框 - 在回发开始时添加空格

c# - 检索域 url

c - 在外部汇编程序中修改 C 数组

arrays - 将数组中的每一项乘以另一个数组中的每一项

javascript - 从 jquery 到 angularjs

javascript - 无法解析包含 HTML 的字符串化数组

c# - 将配置添加到 App.config 文件时出错

c# - 有没有办法从 Windows 应用商店 (WinRT) 应用程序中的图像裁剪和校正四边形?

java - Java 中 Arrays.deepEquals() 的时间复杂度

javascript - Kendo UI 移动 ListView 示例不适用于我的代码