c# - 如何将 Json 数组反序列化为不同的对象?

标签 c# asp.net json json.net

我正在尝试使用 json.net 将 json 字符串反序列化为 C# 上的新列表。

当我进行直接反序列化时,我得到一些属性为空,因为我的列表中有不同的对象。

所以我想为该任务创建一个“翻译器”,构建通用对象并设置对象的属性。

这就是我的进步..

CitasProfesorWeb.JavaService.AgendaWSService service =
    new JavaService.AgendaWSService();
JsonTextReader reader;

private void cargaDatos()
{
    String lista = service.obtenerCitasNuevas(2);
    reader = new JsonTextReader(new StringReader(lista));

    while (reader.Read())
    {
        //here i want to read the attributes or objects
    }
}

我尝试使用 JsonConvert.PopulateObject(reader,cita) 但收到一条错误消息,指出我的参数无效。

--编辑--

这是我收到的字符串:

[{"idCita":6,"fechaSolicitud":"2012/4/20","fechaCita":"2012/4/19","horario":{"idHorario":1,"fechaInicio":"2012/1/16","fechaHoy":1337281297199,"fechaFin":"2012/5/30","nombre":"Enero-Mayo 2012","profesor":{"idProfesor":2, "nombre":"Guillermo", "apellido":"Salazar", "nomUsuario":"g.salazar", "email":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c0a7eeb3a1aca1baa1b280a9b4b3afaeeeadb8" rel="noreferrer noopener nofollow">[email protected]</a>", "ubicacion":"LV323", "descripcion":"Profesor Interino"}},"alumno":{"idAlumno":1, "nombre":"Jhonatan", "apellido":"Romero", "nomUsuario":" jromero", "email":"jhonatanromgggggh", "carrera":"LSIA" },"asunto":"asesorias","status":"0","horaCita":"10:0"}, {"idCita":7,"fechaSolicitud":"2012/4/20","fechaCita":"2012/4/27","horario":{"idHorario":1,"fechaInicio":"2012/1/16","fechaHoy":1337281297199,"fechaFin":"2012/5/30","nombre":"Enero-Mayo 2012","profesor":{"idProfesor":2, "nombre":"Guillermo", "apellido":"Salazar", "nomUsuario":"g.salazar", "email":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="82e5acf1e3eee3f8e3f0c2ebf6f1edecaceffa" rel="noreferrer noopener nofollow">[email protected]</a>", "ubicacion":"LV323", "descripcion":"Profesor Interino"}},"alumno":{"idAlumno":1, "nombre":"Jhonatan", "apellido":"Romero", "nomUsuario":" jromero", "email":"jhonatanromgggggh", "carrera":"LSIA" },"asunto":"asesorias","status":"0","horaCita":"11:0"}, {"idCita":11,"fechaSolicitud":"2012/4/20","fechaCita":"2012/4/20","horario":{"idHorario":1,"fechaInicio":"2012/1/16","fechaHoy":1337281297199,"fechaFin":"2012/5/30","nombre":"Enero-Mayo 2012","profesor":{"idProfesor":2, "nombre":"Guillermo", "apellido":"Salazar", "nomUsuario":"g.salazar", "email":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cdaae3beaca1acb7acbf8da4b9bea2a3e3a0b5" rel="noreferrer noopener nofollow">[email protected]</a>", "ubicacion":"LV323", "descripcion":"Profesor Interino"}},"alumno":{"idAlumno":1, "nombre":"Jhonatan", "apellido":"Romero", "nomUsuario":" jromero", "email":"jhonatanromgggggh", "carrera":"LSIA" },"asunto":"asesorias","status":"0","horaCita":"17:0"}, {"idCita":12,"fechaSolicitud":"2012/4/27","fechaCita":"2012/5/3","horario":{"idHorario":1,"fechaInicio":"2012/1/16","fechaHoy":1337281297199,"fechaFin":"2012/5/30","nombre":"Enero-Mayo 2012","profesor":{"idProfesor":2, "nombre":"Guillermo", "apellido":"Salazar", "nomUsuario":"g.salazar", "email":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8ee9a0fdefe2eff4effccee7fafde1e0a0e3f6" rel="noreferrer noopener nofollow">[email protected]</a>", "ubicacion":"LV323", "descripcion":"Profesor Interino"}},"alumno":{"idAlumno":1, "nombre":"Jhonatan", "apellido":"Romero", "nomUsuario":" jromero", "email":"jhonatanromgggggh", "carrera":"LSIA" },"asunto":"tesis","status":"0","horaCita":"12:0"}, {"idCita":15,"fechaSolicitud":"2012/5/11","fechaCita":"2012/4/20","horario":{"idHorario":1,"fechaInicio":"2012/1/16","fechaHoy":1337281297200,"fechaFin":"2012/5/30","nombre":"Enero-Mayo 2012","profesor":{"idProfesor":2, "nombre":"Guillermo", "apellido":"Salazar", "nomUsuario":"g.salazar", "email":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="73145d00121f12091201331a07001c1d5d1e0b" rel="noreferrer noopener nofollow">[email protected]</a>", "ubicacion":"LV323", "descripcion":"Profesor Interino"}},"alumno":{"idAlumno":1, "nombre":"Jhonatan", "apellido":"Romero", "nomUsuario":" jromero", "email":"jhonatanromgggggh", "carrera":"LSIA" },"asunto":"Tesis","status":"0","horaCita":"10:0"}]

这是我的课:

public class Cita
    {
        Profesor profesor;

        public Profesor Profesor
        {
            get { return profesor; }
            set { profesor = value; }
        }

        Alumno alumno;

        public Alumno Alumno
        {
            get { return alumno; }
            set { alumno = value; }
        }

        DateTime inicioCita;

        public DateTime InicioCita
        {
            get { return inicioCita; }
            set { inicioCita = value; }
        }

        String asunto;

        public String Asunto
        {
            get { return asunto; }
            set { asunto = value; }
        }

        String lugar;

        public String Lugar
        {
            get { return lugar; }
            set { lugar = value; }
        }

        int status;

        public int Status
        {
            get { return status; }
            set { status = value; }
        }

        DateTime fechaSolicitud;

        public DateTime FechaSolicitud
        {
            get { return fechaSolicitud; }
            set { fechaSolicitud = value; }
        }


    }

最佳答案

我会使用dynamic来解析你的json字符串,如下所示(不需要声明citahorarioprofesor,校友类(class))

dynamic dynObj = JsonConvert.DeserializeObject(json);

foreach (var cita in dynObj)
{
    Console.WriteLine("{0} {1} {2}",
        cita.horario.profesor.apellido,
        cita.alumno.nombre,
        cita.fechaSolicitud
        );
}

关于c# - 如何将 Json 数组反序列化为不同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10641748/

相关文章:

c# - ASP.NET MVC 5 @Html.Raw 不适用于 ▶

asp.net - MVC 应用程序的键盘快捷键

asp.net - 将 MVC 站点部署到 IIS 会导致它找不到默认的共享局部 View

java - 还有什么更好的方法来发送响应并以表结构打印数据?

c# - 如何创建更加用户友好的 string.format 语法?

c# - 自动滚动文本框使用的内存超出预期

c# - 如何提高自定义 BindingList 上 AddRange 方法的性能?

c# - 如何使用Elastic low-level-client批量插入嵌套类型对象?

java - Java 中的 JSON 解析和数据操作

javascript - 如何自动缩放传单中的多边形?