代码之家  ›  专栏  ›  技术社区  ›  user2726975

从C访问json节点时出现问题#

  •  1
  • user2726975  · 技术社区  · 7 年前

    我有一个json文件需要保存为sqlserver表。这是测试.json有学生详细资料的课程。

    [{
        "Studentid": "001006360",
        "Grade": "2",
        "ExtraWork": {
            "TopRecommended": ["000133692",
            "102067155",
            "887273865"],
            "OtherCourses": ["228963647",
            "138909237",
            "899791144",
            "216165613",
            "113239563"]
        },
        "Courses": [{
            "smalldesc": "this is a test ",
            "Details": {
                "description": "Summary of the course",
                "collegeCode": "32466"
            }
        },
        {
            "smalldesc": "Second test",
            "Details": {
                "description": "Business- Course Summary",
                "collegeCode": "32469"
            }
        }]
    }]
    

    下面是C程序。 我不知道如何访问“smalldesc”和“collegeCode”。

    var jsonText = File.ReadAllText(@"C:\test.json");    
    var ser = JsonConvert.DeserializeObject<List<RootObject>>(jsonText);
    for (int i = 0; i < ser.Count; i++)
    {
        string Studentid = ser[i].Studentid;
        string  Grade = ser[i].Grade;
    
        var result = JsonConvert.DeserializeObject<List<Course>>(jsonText);
        for (int k = 0; k < result.Count; k++)
        {
            string smalldesc = result[k].smalldesc;
            string collegeCode = result[k].Details.collegeCode;
        }
    }
    

    Json对象类定义:

    public class ExtraWork
    {
        public List<string> TopRecommended { get; set; }
        public List<string> OtherCourses { get; set; }
    }
    
    public class Details
    {
        public string description { get; set; }
        public string collegeCode { get; set; }
    }
    
    public class Course
    {
        public string smalldesc { get; set; }
        public Details Details { get; set; }
    }
    
    public class RootObject
    {
        public string Studentid { get; set; }
        public string Grade { get; set; }
        public ExtraWork ExtraWork { get; set; }
        public List<Course> Courses { get; set; }
    }
    

    1 回复  |  直到 7 年前
        1
  •  2
  •   maccettura    7 年前

    var ser = JsonConvert.DeserializeObject<List<RootObject>>(jsonText);
    

    已经

    您的代码可以如此简单:

    var ser = JsonConvert.DeserializeObject<List<RootObject>>(jsonText);
    foreach (var s in ser)
    {
        string Studentid = s.Studentid;
        string  Grade = s.Grade;
    
        foreach(var course in ser.Courses)
        {  
            string smalldesc = course .smalldesc;
            string details = course .Details.collegeCode;
        }
    }
    

    仅供参考:使用 foreach 循环在迭代集合时更容易处理(假设集合类型实现 IEnumerable