繁体   English   中英

反序列化json newtonsoft将对象保留为空C#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM