我在C#JToken中使用.Count Methode时遇到问题。谁知道我做错了什么?
我在这一行收到错误:
JToken lastid = (int)IDObject["data"].Count(-1)["q_id"];
Argument "2": Can not convert "int" to "System.Func
<
Newtonsoft.Json.Linq.Jtoken,bool>"
修改
好的,我有一个json格式的567个ID。有.First,我可以得到Id = 1,现在我想得到最后一个Id,在这种情况下,它是id = 567
答案 0 :(得分:0)
您想要在列表底部返回令牌的ID。
.Count()的使用不正确,请参阅this和this。函数本身将返回列表中元素的总和。或者,您可以传递一个函数,该函数将返回列表中满足要求的所有元素的计数。你收到的错误是因为Count(-1)期望一个函数,但是得到一个int。
现在检索列表中最后一个标记的ID。您只需使用
调用列表的最后一项即可int id = IDObject["data"].Last()["q_id"];
.Last()将调用列表中的最后一项。
有关列表及其导航方式的其他信息,建议您查看API或this方便的网站
编辑:
你很可能是JSON就像
{ "data":[{
"question1",
"question2",
"question3"
}]
}
调用IDOBject [“data”]将这些问题转换为
{
"q_id",
"q_text",
"q_something_else",
"q_id",
"q_text",
"ect.."
}
未来的建议是通过附加标记省略您发送的数据。像
这样的东西{"data":
**question**:[
{
"q_id",
"q_text",
"q_something_else"
},{
"q_id",
"q_text",
"q_something_else"
}]
};
这有助于将您的问题与彼此隔离开来。 但这只是一个建议,因为我相信你的当前问题有一个解决方案。
int id = IDObject["data"].Where(tag => tag.Equals("q_id")).Last()["q_id"];
除了“q_id”标记之外,where将过滤掉所有标记。假设thr 567是最后一个q_id,。Last()将选择此标记。
编辑2:
实际上,您甚至可以通过简单地获取所需的相关标签来缩短它,567。
int id = IDObject["data"].Where(tag => tag["q_id"] == 567);
或在字符串
的情况下int id = IDObject["data"].Where(tag => tag["q_id"].Equals("567"));
答案 1 :(得分:-1)
我认为不可能将Count方法作为参数传递给int。此时错误可能会被抛出,因为在尝试执行以下代码时会出现类似的错误:
new List<int>().Count(-1);
//Argument type 'int' is not assignable to parameter type 'System.Func<int,bool>'
也许你可以通过澄清你究竟想要做什么来帮助。