c# - 如何将此 json 转换为字符串并获取“id”属性的值
问题描述
我想只返回 jsonList 中的课程 ID。但我的代码不起作用。
我的json输出:
"{\"courses\":[{\"id\":5,\"fullname\":\"Course temp\",\"displayname\":\"Course temp\",\"shortname\":\"ct\",\"categoryid\":17,\"categoryname\":\"Course templates\",\"sortorder\":40002,\"summary\":\"\",\"summaryformat\":1,\"summaryfiles\":[],\"overviewfiles\":[],\"contacts\":[],\"enrollmentmethods\":[\"manual\"],\"idnumber\":\"\",\"format\":\"topics\",\"showgrades\":1,\"newsitems\":5,\"startdate\":20120160,\"enddate\":20120160,\"maxbytes\":0,\"showreports\":0,\"visible\":1,\"groupmode\":0,\"groupmodeforce\":0,\"defaultgroupingid\":0,\"enablecompletion\":1,\"completionnotify\":0,\"lang\":\"\",\"theme\":\"\",\"marker\":0,\"legacyfiles\":0,\"calendartype\":\"\",\"timecreated\":1583825606,\"timemodified\":1583910617,\"requested\":0,\"cacherev\":1583913808,\"filters\":[{\"filter\":\"displayh5p\",\"localstate\":0,\"inheritedstate\":1},{\"filter\":\"mathjaxloader\",\"localstate\":0,\"inheritedstate\":1},{\"filter\":\"activitynames\",\"localstate\":0,\"inheritedstate\":1},{\"filter\":\"mediaplugin\",\"localstate\":0,\"inheritedstate\":1}],\"courseformatoptions\":[{\"name\":\"hiddensections\",\"value\":0},{\"name\":\"coursedisplay\",\"value\":0}]}],\"warnings\":[]}"
我的代码:(我只想返回id
)
public int GetCourseDetails(Course course)
{
string URI = "http://localhost/Moodle/webservice/rest/server.php";
using (WebClient wc = new WebClient())
{
wc.QueryString.Add("wstoken", "49345fa96c58118326b874bxxxxx");
wc.QueryString.Add("wsfunction", "core_course_get_courses_by_field");
wc.QueryString.Add("moodlewsrestformat", "json");
wc.QueryString.Add("field", "shortname");
wc.QueryString.Add("value",course.shortname);
var response_data = wc.UploadValues(URI, "POST", wc.QueryString);
var response = Encoding.ASCII.GetString(response_data);
// return response;
var k = JsonConvert.DeserializeObject<List<dynamic>>(response);
foreach (var a in k)
{
id = (a["id"]);
}
return id;
}
}
解决方案
由于您的根对象不是数组,因此您需要将 Json 反序列化为dynamic
而不是List<dynamic>
,然后通过此动态对象选择第一门课程并获得id
如下:
var k = JsonConvert.DeserializeObject<dynamic>(response);
var courseList = k.courses;
id = Convert.ToInt32(courseList[0]["id"]);
推荐阅读
- node.js - Ionic 在本地安装但无法运行命令
- python - 将python应用程序转换为Debian包的好方法是什么
- javascript - 全局安装后,我无法在项目中本地安装 Gulp
- javascript - 如何使用 Angular8 编辑特定行内联编辑
- css - 为什么运行 gulp sass 'gulp-sass 5 没有默认的 Sass 编译器时出现此错误;请自己设置一个'
- typescript - 为什么在vite中不能使用reflect-metadata
- r - gregexpr - 如何维护在 r 中提取的数字列表的顺序
- php - set a variable that holds array from a function
- python - 根据它们之间的接近度创建坐标列表
- php - Laravel 查询结果无法正确显示在刀片上