[英]deserialization json newtonsoft leaves the object with everything in null C #
问候我遇到以下问题,事实证明,我尝试使用newtonsoft库对json进行反序列化,方法如下:
Tramite body = JsonConvert.DeserializeObject < Tramite> (JsonBody);
发送的Json:
{
"body":[
{
"id":3772,
"processInstanceId":"1416",
"tipoTramite":{
"id":1,
"descripcion":"Solicitud Patente Comercial (Municipalidad)"
},
"canal":{
"id":0,
"nombre":""
},
"definicionTramite":{
"id":282,
"tipoTramite":null,
"idEstado":0,
"version":3,
"idDepartamento":0,
"idArea":0,
"nombre":"Solicitud Patente Comercial (Municipalidad)",
"codigo":null,
"descripcion":null,
"deploymentId":null,
"configuracion":null,
"processId":null
},
"institucion":{
"id":1045,
"idInstitucionBase":null,
"tipoInstitucion":null,
"nombre":"Municipalidad de La Granja",
"codigo":"LAGRANJA",
"direccion":null,
"logoWeb":null,
"logoPdf":null,
"telefonoFijo":null,
"email":null,
"propietario":null
},
"idDepartamento":1,
"idArea":3,
"estado":{
"id":294,
"definicionTramite":{
"id":282,
"tipoTramite":null,
"idEstado":0,
"version":0,
"idDepartamento":0,
"idArea":0,
"nombre":null,
"codigo":null,
"descripcion":null,
"deploymentId":null,
"configuracion":null,
"processId":null
},
"codigo":"03",
"nombre":"En Proceso"
},
"cve":"3df31748ec86df4280ecfaa853ead07a8918b345",
"numeroSolicitud":"555",
"tarifa":0,
"rut":{
"numero":13639987,
"dv":"K"
},
"rutEmpresa":{
"numero":76291578,
"dv":"2"
},
"nombre":"Solicitud Patente Comercial (Municipalidad)",
"flagPagado":false,
"fechaCreacion":1508792522683,
"fechaModificacion":1508792809726,
"datosTramite":[
{
"id":0,
"key":"inmueble_direccion_numero",
"tipo":"string",
"data":"3334"
}
],
"deploymenId":"cl.corfo.municipiogenerico:bpm-patentegenerica:1.4",
"processId":"patenteGenerica",
"solicitante":"FÉLIX EDUARDO CIFUENTES CID",
"contribuyente":"NombreMock de Fantasia",
"keyConfiguracion":"patente-comercial-ampliacion-giro"
}
]
}
这是对象: https : //i.stack.imgur.com/MTT9s.png
序列号序列号:
public int id { get; set; }
public string processInstanceId { get; set; }
Dictionary<string, string> tipoTramite { get; set; }
Dictionary<string, string> canal { get; set; }
public DefinicionTramite definicionTramite { get; set; }
public Institucion institucion { get; set; }
public int idDepartamento { get; set; }
public int idArea { get; set; }
public Estado estado { get; set; }
public string cve { get; set; }
public string numeroSolicitud { get; set; }
public double tarifa { get; set; }
Dictionary<string, string> rut { get; set; }
Dictionary<string, string> rutEmpresa { get; set; }
public string nombre { get; set; }
public bool flagPagado { get; set; }
public string fechaCreacion { get; set; }
public string fechaModificacion { get; set; }
public List<DatosTramite> datosTramite { get; set; }
public string deploymenId { get; set; }
public string processId { get; set; }
public string solicitante { get; set; }
public string contribuyente { get; set; }
public string keyConfiguracion { get; set; }
定义Tramite类
public int id { get; set; }
public string tipoTramite { get; set; }
public int idEstado { get; set; }
public int version { get; set; }
public int idDepartamento { get; set; }
public int idArea { get; set; }
public string nombre { get; set; }
public string codigo { get; set; }
public string descripcion { get; set; }
public string deploymentId { get; set; }
public string configuracion { get; set; }
public string processId { get; set; }
机构类
public int id { get; set; }
public string idInstitucionBase { get; set; }
public string tipoInstitucion { get; set; }
public string nombre { get; set; }
public string codigo { get; set; }
public string direccion { get; set; }
public string logoWeb { get; set; }
public string logoPdf { get; set; }
public string telefonoFijo { get; set; }
public string email { get; set; }
public string propietario { get; set; }
Estado课程
public int id { get; set; }
public DefinicionTramite definicionTramite { get; set; }
public string codigo { get; set; }
public string nombre { get; set; }
达托斯Tramite类
public int id { get; set; }
public string key { get; set; }
public string tipo { get; set; }
public string data { get; set; }
这些都是我发送的json的反序列化中涉及的所有类,我尝试对dataSet进行反序列化,但是如果有人知道,它也可能因为包含的类而异(根据我在stackoverflow问题中所读的内容)我不好,或者在C#中还有另一种对json反序列化的方法可以帮助我
这对我有用:
JsonConvert.DeserializeObject<Rootobject>(json)
这是我创建的类:
public class Rootobject
{
public Body[] body { get; set; }
}
public class Body
{
public int id { get; set; }
public string processInstanceId { get; set; }
public Tipotramite tipoTramite { get; set; }
public Canal canal { get; set; }
public Definiciontramite definicionTramite { get; set; }
public Institucion institucion { get; set; }
public int idDepartamento { get; set; }
public int idArea { get; set; }
public Estado estado { get; set; }
public string cve { get; set; }
public string numeroSolicitud { get; set; }
public int tarifa { get; set; }
public Rut rut { get; set; }
public Rutempresa rutEmpresa { get; set; }
public string nombre { get; set; }
public bool flagPagado { get; set; }
public long fechaCreacion { get; set; }
public long fechaModificacion { get; set; }
public Datostramite[] datosTramite { get; set; }
public string deploymenId { get; set; }
public string processId { get; set; }
public string solicitante { get; set; }
public string contribuyente { get; set; }
public string keyConfiguracion { get; set; }
}
public class Tipotramite
{
public int id { get; set; }
public string descripcion { get; set; }
}
public class Canal
{
public int id { get; set; }
public string nombre { get; set; }
}
public class Definiciontramite
{
public int id { get; set; }
public object tipoTramite { get; set; }
public int idEstado { get; set; }
public int version { get; set; }
public int idDepartamento { get; set; }
public int idArea { get; set; }
public string nombre { get; set; }
public object codigo { get; set; }
public object descripcion { get; set; }
public object deploymentId { get; set; }
public object configuracion { get; set; }
public object processId { get; set; }
}
public class Institucion
{
public int id { get; set; }
public object idInstitucionBase { get; set; }
public object tipoInstitucion { get; set; }
public string nombre { get; set; }
public string codigo { get; set; }
public object direccion { get; set; }
public object logoWeb { get; set; }
public object logoPdf { get; set; }
public object telefonoFijo { get; set; }
public object email { get; set; }
public object propietario { get; set; }
}
public class Estado
{
public int id { get; set; }
public Definiciontramite1 definicionTramite { get; set; }
public string codigo { get; set; }
public string nombre { get; set; }
}
public class Definiciontramite1
{
public int id { get; set; }
public object tipoTramite { get; set; }
public int idEstado { get; set; }
public int version { get; set; }
public int idDepartamento { get; set; }
public int idArea { get; set; }
public object nombre { get; set; }
public object codigo { get; set; }
public object descripcion { get; set; }
public object deploymentId { get; set; }
public object configuracion { get; set; }
public object processId { get; set; }
}
public class Rut
{
public int numero { get; set; }
public string dv { get; set; }
}
public class Rutempresa
{
public int numero { get; set; }
public string dv { get; set; }
}
public class Datostramite
{
public int id { get; set; }
public string key { get; set; }
public string tipo { get; set; }
public string data { get; set; }
}
您需要查看JSON并确定主体是一个数组和一个根。 因此,必须有一个以body为数组的根类。 创建它,然后反序列化。 那一定行得通
首先,您的C#模型与JSON并不完全相同。 例如,您的主类中的tipoTramite和Json对象是不同的。 其次,这里使所有内容都为null的原因是要在json中发送对象数组,但是在服务器级别上要反序列化对象。 您可以执行以下操作之一:
1.发送JSON作为对象而不是如下所示的数组,然后您的代码应该工作
{
"body":{
"id":3772,
"processInstanceId":"1416",
...
...
...
}
2如果不想更改json,则为了反序列化,必须创建一个包含Tramite类型数组的类,然后使用该类对json反序列化:
public class TramiteJsonModel{
public Tramite[] Body {get;set;}
}
现在,使用下面的代码反序列化内容:
TramiteJsonModel body = JsonConvert.DeserializeObject <TramiteJsonModel> (JsonBody);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.