我正在尝试使用json.net将json字符串反序列化为C#上的新列表。
当我进行直接反序列化时,我得到一些属性为null,因为我的列表中有不同的对象。
所以我想为该任务创建一个“翻译器”,构建通用对象并设置我的对象的属性。
这是我的进步..
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":"g.salazar@itson.mx", "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":"g.salazar@itson.mx", "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":"g.salazar@itson.mx", "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":"g.salazar@itson.mx", "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":"g.salazar@itson.mx", "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; }
}
}
答案 0 :(得分:4)
我会使用dynamic
来解析你的json字符串,如下所示(无需声明cita
,horario
,profesor
,alumno
类<) / p>
dynamic dynObj = JsonConvert.DeserializeObject(json);
foreach (var cita in dynObj)
{
Console.WriteLine("{0} {1} {2}",
cita.horario.profesor.apellido,
cita.alumno.nombre,
cita.fechaSolicitud
);
}
答案 1 :(得分:0)
这是将JSON转换为对象的通用类(请务必包含System.Web.Script.Serialization
)
public static T JsonToObject<T>(string JsonData)
{
// Deserialize the JSON into the object
JavaScriptSerializer jss = new JavaScriptSerializer();
T rf = (T)jss.Deserialize(JsonData, typeof(T));
return rf;
}
要将对象转换回JSON,请使用此通用类
public static string ObjectToJson<T>(T rf)
{
// Serialize the object as JSON
StringBuilder sb = new StringBuilder();
JavaScriptSerializer jss = new JavaScriptSerializer();
jss.Serialize(rf, sb);
return sb.ToString();
}
作为使用示例,您可以使用
string json = @"[{""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"":""g.salazar@itson.mx"", ""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"":""g.salazar@itson.mx"", ""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"":""g.salazar@itson.mx"", ""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"":""g.salazar@itson.mx"", ""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"":""g.salazar@itson.mx"", ""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""}]";
List<Cita> p = JsonToObject<List<Cita>>(json);
编辑:您特别提到了JSON.NET,因此如果您想继续使用上述代码可能无法帮助您。但是,要解析JSON字符串的所有属性,您将需要一个与JSON响应字符串匹配的类。从那里,您可以根据需要设置其他对象的属性。