Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中解析JsonObject#_C#_.net_Json_Json.net - Fatal编程技术网

C# 如何在C中解析JsonObject#

C# 如何在C中解析JsonObject#,c#,.net,json,json.net,C#,.net,Json,Json.net,我正在尝试解析下面的json对象,但我不知道怎么做,因为json对象中有“讲师”??我不知道如何管理“讲师”,他们是Json中的另一个对象,但在数据[0]中是一个对象,在数据[1]中是一个标志或布尔值。这件事把我弄糊涂了。你知道我怎样才能做到这一点吗 { "result": "Success", "data": [ { "student_course_id": "82", "student_id": "30",

我正在尝试解析下面的json对象,但我不知道怎么做,因为json对象中有“讲师”??我不知道如何管理“讲师”,他们是Json中的另一个对象,但在数据[0]中是一个对象,在数据[1]中是一个标志或布尔值。这件事把我弄糊涂了。你知道我怎样才能做到这一点吗

{
    "result": "Success",
    "data": [
        {
            "student_course_id": "82",
            "student_id": "30",
            "term_course_id": "18",
            "section_id": "3",
            "term_id": "12",
            "course_id": "15",
            "credit_hours": "26",
            "is_elective": "Elective",
            "is_practical": "0",
            "teacher_id": "10",
            "program_id": "5",
            "course_code": "E2",
            "course_title": "English 2",
            "lecturer": {
                "fname": "Ali",
                "lname": "farooq",
                "phone": "1234567890",
                "email": "farooq@teacher.com",
                "thumb": "../photos/thumb/1391515491.png"
            }
        },
        {
            "student_course_id": "83",
            "student_id": "30",
            "term_course_id": "19",
            "section_id": "3",
            "term_id": "12",
            "course_id": "16",
            "credit_hours": "26",
            "is_elective": "Elective",
            "is_practical": "0",
            "teacher_id": "8",
            "program_id": "5",
            "course_code": "C2",
            "course_title": "Culture 2",
            "lecturer": false
        }
        ]
}
C#代码

public async static Task<StudentSubjectsClassWithError> StudentSubjectsList()
{
    HttpClient client = new HttpClient();

    string baseUrl = getBaseUrl();

    try
    {
        string flickrResult = await client.GetStringAsync(baseUrl);
        StudentSubjectsClassWithError studentSubjectsResult = new StudentSubjectsClassWithError();
        try
        {

            StudentSubjectsJson apiData =
                JsonConvert.DeserializeObject<StudentSubjectsJson>(flickrResult);

            List<StudentSubjectsClass> mStudentSubjectsList = new List<StudentSubjectsClass>();

            if (apiData.data != null && apiData.result == "Success")
            {
                studentSubjectsResult.message = "";
                studentSubjectsResult.result = apiData.result;

                foreach (StudentSubjectsJsonItem data in apiData.data)
                {
                    StudentSubjectsClass studentSubjects = new StudentSubjectsClass();

                    studentSubjects.student_course_id = data.student_course_id;
                    studentSubjects.student_id = data.student_id;
                    studentSubjects.term_course_id = data.term_course_id;
                    studentSubjects.section_id = data.section_id;
                    studentSubjects.term_id = data.term_id;
                    studentSubjects.course_id = data.course_id;
                    studentSubjects.credit_hours = data.credit_hours;
                    studentSubjects.is_elective = data.is_elective;
                    studentSubjects.is_practical = data.is_practical;
                    studentSubjects.program_id = data.program_id;
                    studentSubjects.course_code = data.course_code;
                    studentSubjects.course_title = data.course_title;

                   //// studentSubjects.lecturer ?????

                    mStudentSubjectsList.Add(studentSubjects);
                }
            }
            else
            {
                studentSubjectsResult.result = apiData.result;
                studentSubjectsResult.message = "No records found.";

            }
            studentSubjectsResult.studentSubjectsList = mStudentSubjectsList;
            return studentSubjectsResult;
        }
        catch (JsonSerializationException)
        {

            try
            {

                StudentSubjectsErrorJson apiData =
                   JsonConvert.DeserializeObject<StudentSubjectsErrorJson>(flickrResult);
                studentSubjectsResult.result = apiData.result;
                studentSubjectsResult.message = apiData.data;
                studentSubjectsResult.studentSubjectsList = null;
                return studentSubjectsResult;
            }

            catch (JsonSerializationException)
            {
            }


        }
        return null;
    }
    catch (Exception)
    {
        return null;
     //   MessageBox.Show("Internet Connection Problem");
    }
}
public异步静态任务StudentSubjectsList()
{
HttpClient=新的HttpClient();
字符串baseUrl=getBaseUrl();
尝试
{
string flickresult=await client.GetStringAsync(baseUrl);
StudentSubjectsClassWithError studentSubjectsResult=新的StudentSubjectsClassWithError();
尝试
{
学生受试者来自apiData=
反序列化对象(flickresult);
List mStudentSubjectsList=新列表();
if(apiData.data!=null&&apiData.result==“成功”)
{
studentSubjectsResult.message=“”;
studentSubjectsResult.result=apiData.result;
foreach(学生受试者apiData.data中的SONITEM数据)
{
StudentSubjectsClass studentSubjects=新的StudentSubjectsClass();
studentSubjects.student\u course\u id=data.student\u course\u id;
studentSubjects.student\u id=data.student\u id;
studentSubjects.term\u course\u id=data.term\u course\u id;
studentSubjects.section\u id=data.section\u id;
studentSubjects.term\u id=data.term\u id;
studentSubjects.course\u id=data.course\u id;
studentSubjects.credit\u hours=data.credit\u hours;
studentSubjects.is_optional=data.is_optional;
studentSubjects.is_practical=data.is_practical;
studentSubjects.program\u id=data.program\u id;
studentSubjects.course\u code=data.course\u code;
studentSubjects.course\u title=data.course\u title;
////学生科目。讲师?????
MSStudentSubjectsList.Add(学生科目);
}
}
其他的
{
studentSubjectsResult.result=apiData.result;
studentSubjectsResult.message=“未找到任何记录。”;
}
studentSubjectsResult.studentSubjectsList=MSStudentSubjectsList;
返回学生主题结果;
}
捕获(JsonSerializationException)
{
尝试
{
StudentSubjectsErrorJson apiData=
反序列化对象(flickresult);
studentSubjectsResult.result=apiData.result;
studentSubjectsResult.message=apiData.data;
studentSubjectsResult.studentSubjectsList=null;
返回学生主题结果;
}
捕获(JsonSerializationException)
{
}
}
返回null;
}
捕获(例外)
{
返回null;
//MessageBox.Show(“互联网连接问题”);
}
}

对于顶层,您有
StudentSubjectsJson
StudentSubjectsJsonItem
对于
数据
数组中的每个元素

对于讲师,您需要定义
studentsubjectsjson讲师
,并将其设置为
StudentSubjectsJsonItem
的属性,称为
讲师

例如:


您已经为顶级设置了
StudentSubjectsJson
,为
数据
数组中的每个元素设置了
StudentSubjectsJsonItem

对于讲师,您需要定义
studentsubjectsjson讲师
,并将其设置为
StudentSubjectsJsonItem
的属性,称为
讲师

例如:


我使用的是Visual Studio 2012,当我想将Json字符串转换为C#class对象时,我复制Json字符串并

-> Click Edit
-> Click Paste Special
-> Click Paste JSON as Classes
或者你也可以使用乔纳森·基思的在线工具

使用JSON2Charp,我从您的json中获得了这个类

public class Datum
{
    public string student_course_id { get; set; }
    public string student_id { get; set; }
    public string term_course_id { get; set; }
    public string section_id { get; set; }
    public string term_id { get; set; }
    public string course_id { get; set; }
    public string credit_hours { get; set; }
    public string is_elective { get; set; }
    public string is_practical { get; set; }
    public string teacher_id { get; set; }
    public string program_id { get; set; }
    public string course_code { get; set; }
    public string course_title { get; set; }
    public object lecturer { get; set; }
}

public class RootObject
{
    public string result { get; set; }
    public List<Datum> data { get; set; }
}
公共类数据
{
公共字符串student_course_id{get;set;}
公共字符串student_id{get;set;}
公共字符串项\u课程\u id{get;set;}
公共字符串节_id{get;set;}
公共字符串项_id{get;set;}
公共字符串course_id{get;set;}
公共字符串credit_hours{get;set;}
公共字符串是{get;set;}
公共字符串是{get;set;}
公共字符串teacher_id{get;set;}
公共字符串程序_id{get;set;}
公共字符串course_代码{get;set;}
公共字符串课程标题{get;set;}
公共对象{get;set;}
}
公共类根对象
{
公共字符串结果{get;set;}
公共列表数据{get;set;}
}
编辑

我还注意到,您的数据数组将讲师作为对象,第二个数据将讲师作为布尔。如果讲师不存在,您可以通过不包括讲师来解决此问题。这会将类更改为:

public class Lecturer
{
    public string fname { get; set; }
    public string lname { get; set; }
    public string phone { get; set; }
    public string email { get; set; }
    public string thumb { get; set; }
}

public class Datum
{
    public string student_course_id { get; set; }
    public string student_id { get; set; }
    public string term_course_id { get; set; }
    public string section_id { get; set; }
    public string term_id { get; set; }
    public string course_id { get; set; }
    public string credit_hours { get; set; }
    public string is_elective { get; set; }
    public string is_practical { get; set; }
    public string teacher_id { get; set; }
    public string program_id { get; set; }
    public string course_code { get; set; }
    public string course_title { get; set; }
    public Lecturer lecturer { get; set; }
}

public class RootObject
{
    public string result { get; set; }
    public List<Datum> data { get; set; }
}
公共课堂讲师
{
公共字符串fname{get;set;}
公共字符串lname{get;set;}
公用字符串电话{get;set;}
公共字符串电子邮件{get;set;}
公共字符串thumb{get;set;}
}
公共类数据
{
公共字符串student_course_id{get;set;}
公共字符串student_id{get;set;}
公共字符串项\u课程\u id{get;set;}
公共字符串节_id{get;set;}
公共字符串项_id{get;set;}
公共字符串course_id{get;set;}
公共字符串credit_hours{get;set;}
公共字符串是{get;set;}
公共字符串是{get;set;}
公共字符串teacher_id{get;set;}
公共字符串程序_id{get;set;}
公共字符串course_代码{get;set;}
公共字符串课程标题{get;set;}
公共图书馆
public class Lecturer
{
    public string fname { get; set; }
    public string lname { get; set; }
    public string phone { get; set; }
    public string email { get; set; }
    public string thumb { get; set; }
}

public class Datum
{
    public string student_course_id { get; set; }
    public string student_id { get; set; }
    public string term_course_id { get; set; }
    public string section_id { get; set; }
    public string term_id { get; set; }
    public string course_id { get; set; }
    public string credit_hours { get; set; }
    public string is_elective { get; set; }
    public string is_practical { get; set; }
    public string teacher_id { get; set; }
    public string program_id { get; set; }
    public string course_code { get; set; }
    public string course_title { get; set; }
    public Lecturer lecturer { get; set; }
}

public class RootObject
{
    public string result { get; set; }
    public List<Datum> data { get; set; }
}
if (apiData.data[x].lecturer != false){
...
}