【发布时间】:2022-06-11 00:50:51
【问题描述】:
我有一个如下的JArray,如何通过“to”和“from”过滤它?,我尝试了以下方法:
JArray ja_test = (JArray)(ja_chat
.Children<JArray>()
.Where(o => (int)o["data"]["from"] == 49 && (int)o["data"]["to"] == 10));
但它会抛出:
无法转换
WhereEnumerableIterator'1[Newtonsoft.Json.Linq.JArray]类型的对象 输入Newtonsoft.Json.Linq.JArray
如何做到这一点?
[
{
"data": {
"to": 49,
"from": 50,
"text": "Hi Dev",
"files": [],
"msg_id": "__chat__",
"datetime": "2022-05-22 12:23:14"
}
},
{
"data": {
"to": 49,
"from": 10,
"text": "Hello Dev",
"files": [],
"msg_id": "__chat__",
"datetime": "2022-05-22 12:23:14"
}
}
]
【问题讨论】:
-
这本质上是一个错字:您正在投射
.Where(...)的结果,而不是ja_chat。为此,您需要((JArray)ja_chat)。 -
@DiplomacyNotWar 不,这不是错字
-
不是错字吗?之后怎么样了?您是否尝试从查询结果(
.Where)中具体化(构建列表或数组)?你真的需要JArray结果吗? -
您正在尝试将 LINQ 查询强制转换为 JArray - 因为它没有意义而失败。你应该做什么取决于你想对查询结果做什么
-
那里 - 我编辑了您的问题,以便更容易理解@DiplomacyNotWar 所说的内容。请注意,它与原来的完全相同,添加的
()是可选的,不会影响任何内容。
标签: c# json .net-core json.net