NewtonSoft JArray-如何使用LINQ选择多个元素 [英] NewtonSoft JArray - how to select multiple elements with LINQ

查看:1407
本文介绍了NewtonSoft JArray-如何使用LINQ选择多个元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些JSON,然后将其解析为JArray对象.我想过滤JArray,以便它只有两个属性,即Title和BodyText.但是无论如何,我只能使用LINQ选择一个值.

I have some JSON which I then parse to JArray object. I want to filter the JArray so it then has only two properties, Title and BodyText. But whatever I try I can only select one value using 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中的两个键值.

Title and BodyText are two keys values in my JArray.

请参阅JArray对象的屏幕快照.元素0中有键值元素.

See screenshot of JArray object. In element 0 there are key value elements.

推荐答案

尝试这种方式:

var titleBodytext = from p in v
                    select new 
                           {
                             Title = (string)p["Title"],
                             Text = (string)p["BodyText"]
                           };

或者,如果您确定v始终仅包含一个元素:

Or if you're sure v always contain only one element :

var titleBodytext = new 
                    { 
                        Title = (string)v[0]["Title"], 
                        Text = (string)v[0]["BodyText"] 
                    };

顺便说一句,您当前的代码似乎没有按照您的想法做.它在from子句中具有p in v,但是无论当前的p是上下文如何,始终选择v[0].无论如何,在v仅包含一个元素的情况下,这不会显示错误的行为.

BTW, your current code doesn't seems to do what you think. It has p in v in the from clause, but always select v[0] regardless of current p being the context. Anyway, this doesn't show wrong behavior in the case where v only contain one element.

这篇关于NewtonSoft JArray-如何使用LINQ选择多个元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆