我有以下 JSON:

{
    "ok": true,
    "resp": [
        {
            "aaa": 111,
            "bbb": "xyz",
            "ccc": [
                {...},
                {
                    "ddd": "hello",
                    "eee": 666,
                },
                {...}
            ],
            "read": false
        },
        {...},
        {...}
    ]
}

和这个 C# 代码:
dynamic my_obj = JsonConvert.DeserializeObject(JSON);
var resps = my_obj.resp;
var x = ((IEnumerable<dynamic>)resps).Cast<dynamic>()
                            .Where(p => p.ccc.eee == 666).Count();

和以下错误:
'Newtonsoft.Json.Linq.JArray' does not contain a definition for 'eee'.

我知道,我可以遍历 'resps' 中的所有元素并计算元素,其中元素 'ccc.eee' 等于 666,但是是否可以用 linq 在一行中完成?

最佳答案

由于 ccc 是数组,因此您需要对其进行迭代。

计数eee=666:

int x = ((IEnumerable<dynamic>)resps).Sum(
            p => ((IEnumerable<dynamic>)p.ccc).Count(o => o.eee == 666));

计算 resp 中至少有一个 eee=666 的对象数:
int x = ((IEnumerable<dynamic>)resps).Count(
            p => ((IEnumerable<dynamic>)p.ccc).Any(o => o.eee == 666));

关于c# - 'Newtonsoft.Json.Linq.JArray' 不包含定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39110204/

10-11 15:54