【问题标题】:How to convert this json into string and get value of the 'id' property如何将此 json 转换为字符串并获取“id”属性的值
【发布时间】:2020-03-28 05:04:16
【问题描述】:

我想只返回 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;

    }
}

【问题讨论】:

标签: c# json moodle-api


【解决方案1】:

由于您的根对象不是数组,您需要将 Json 反序列化为dynamic 而不是List&lt;dynamic&gt;,然后通过此动态对象选择第一门课程并获取id,如下所示:

var k = JsonConvert.DeserializeObject<dynamic>(response);

var courseList = k.courses;
id = Convert.ToInt32(courseList[0]["id"]);

【讨论】:

    【解决方案2】:

    添加对System.Web.Extensions的引用:

    JavaScriptSerializer jss = new JavaScriptSerializer();
    var jsonObj =jss.Deserialize<dynamic>(response);
    var id=int.Parse(jsonObj.courses[0]["id"]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 2015-05-10
      • 2016-08-09
      • 2021-06-02
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多