none
Como converter JSON para classe .NET C# (serializar) RRS feed

  • Pergunta

  • Olá boa tarde.

    Eu tenho o seguinte JSON

    { "positions": 
    	[ 
    		{ 
    			"id": 2033045642, 
    			"placa": "XXX1234", 
    			"serialNumber": "1254987", 
    			"coord": [-20.5190, -50.6472], 
    			"end": "R. São Paulo, 100, Londrina, PR", 
    			"dInc": "2014-05-23T14:45:59.603Z", 
    			"dPos": "2014-05-23T14:18:02.000Z", 
    			"motorista": "12345678914", 
    			"info": 
    			 {
    					"odo": 789.15, "rpm": 900, "vel": 0, "ign": true, "log": true, "gps": true 
    			 },
    			"eventos": 	
    		  	 [
      			    { "desc": "Ignição Ligada", "src": true } 
    			 ], 
    			"macros": 
    			 [ { "desc": " 223|SAIDA PDV|435776||", "aprProc": " PDV:435776" }, 
    				{ "desc": " 223|SAIDA PDV|435776||", "aprProc": " PDV:435776" } 
    			 ]
       		}
    		, 
    		{ 
    			"id": 2033045643,
    				"placa": "XXX1234", "serialNumber": "1254987", "coord": [-20.5110, -50.6432], "end": "R. São Paulo, 100, Londrina, PR", "dInc": "2014-05-23T14:48:59.603Z", 
    				"dPos": "2014-05-23T14:21:02.000Z", "motorista": "12345678914", "info": { "odo": 792.01, "rpm": 1200, "vel": 50, "ign": true, "log": false, "gps": true }, 
    				"eventos": [ { "desc": "Ignição Ligada", "src": false }, { "desc": "Direção sob chuva", "src": false } ], 
    				[ { "desc": " 223|SAIDA PDV|435776||", "aprProc": " PDV:435776" }, 
    					{ "desc": " 223|SAIDA PDV|435776||", "aprProc": " PDV:435776" } 
    			    ]
    		} 
    	] 
    }
    


    Preciso ler estes dados num web service WCF. Para isso, criei a classe abaixo, mas não consigo ler os dados dos nós.

        [DataContract]
        public partial class cCarga
        {
            [DataMember]
            public positions[] positions { get; set; }
        }
    
        [DataContract]
        public partial class positions
        {
            [DataMember]
            public cpositions _positions { get; set; }
            [DataMember]
            public info _info { get; set; }
            [DataMember]
            public eventos[] _eventos { get; set; }
            [DataMember]
            public macros[] _macros { get; set; }
    
            [DataContract]
            public partial class cpositions
            {
                [DataMember]
                public string id { get; set; }
                [DataMember]
                public string placa { get; set; }
                [DataMember]
                public string serialNumber { get; set; }
                [DataMember]
                public string coord { get; set; }
                [DataMember]
                public string end { get; set; }
                [DataMember]
                public string dInc { get; set; }
                [DataMember]
                public string dPos { get; set; }
                [DataMember]
                public string motorista { get; set; }
                //[DataMember]
                //public info info { get; set; }
            }
        }
    
        [DataContract]
        public partial class info
        {
            //[DataMember]
            //public cinfo _info { get; set; }
    
            //[DataContract]
            //public partial class cinfo
            //{
                [DataMember]
                public string odo { get; set; }
                [DataMember]
                public string rpm { get; set; }
                [DataMember]
                public string vel { get; set; }
                [DataMember]
                public string ign { get; set; }
                [DataMember]
                public string log { get; set; }
                [DataMember]
                public string gps { get; set; }
            //}
        }
    
        [DataContract]
        public partial class eventos
        {
            //[DataMember]
            //public ceventos _eventos { get; set; }
    
            //[DataContract]
            //public partial class ceventos
            //{
            [DataMember]
            public string desc { get; set; }
            [DataMember]
            public string src { get; set; }
            //}
        }
    
        [DataContract]
        public partial class macros
        {
            //[DataMember]
            //public cmacros _macro { get; set; }
    
            //[DataContract]
            //public partial class cmacros
            //{
                [DataMember]
                public string desc { get; set; }
                [DataMember]
                public string aprProc { get; set; }
            //}
        }
    

    O que aparece são somente o nó root. veja imagem.

    Alguém pode ajudar, indicar uma documentação, ou outra forma de ler os dados?

    Obrigado.

    segunda-feira, 25 de abril de 2016 17:45

Respostas

  • Boa tarde,

    José o retorno "json" está em um formato inválido. Observe abaixo da "tag eventos" que você realiza a abertura e fechamento mas não associa um nome. Para solucionar este problema você pode fazer assim:

    "eventos": [ { "desc": "Ignição Ligada", "src": false }, { "desc": "Direção sob chuva", "src": false }, 
    				 { "desc": " 223|SAIDA PDV|435776||", "aprProc": " PDV:435776" }, 
    					{ "desc": " 223|SAIDA PDV|435776||", "aprProc": " PDV:435776" } 
    			    ]
    ou
    
    "eventos":  [ { "desc": "Ignição Ligada", "src": false }, { "desc": "Direção sob chuva", "src": false } ], 
    "eventos2":	[ { "desc": " 223|SAIDA PDV|435776||", "aprProc": " PDV:435776" }, 
    					{ "desc": " 223|SAIDA PDV|435776||", "aprProc": " PDV:435776" } 
    			    ]		

    Para criar a classe de acordo com o "json" você pode copiar gerar aqui:
    http://json2csharp.com/

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Marcado como Resposta Jose Geraldo segunda-feira, 25 de abril de 2016 18:39
    segunda-feira, 25 de abril de 2016 18:33
  • Copie o código do seu JSON, abra o VS e crie uma classe, depois no menu do VS faça como na imagem abaixo que vai gerar sua classe c# baseada no seu JSON, veja:


    • Editado Poliana Dias segunda-feira, 25 de abril de 2016 18:37
    • Marcado como Resposta Jose Geraldo segunda-feira, 25 de abril de 2016 18:48
    segunda-feira, 25 de abril de 2016 18:36

Todas as Respostas

  • Boa tarde,

    José o retorno "json" está em um formato inválido. Observe abaixo da "tag eventos" que você realiza a abertura e fechamento mas não associa um nome. Para solucionar este problema você pode fazer assim:

    "eventos": [ { "desc": "Ignição Ligada", "src": false }, { "desc": "Direção sob chuva", "src": false }, 
    				 { "desc": " 223|SAIDA PDV|435776||", "aprProc": " PDV:435776" }, 
    					{ "desc": " 223|SAIDA PDV|435776||", "aprProc": " PDV:435776" } 
    			    ]
    ou
    
    "eventos":  [ { "desc": "Ignição Ligada", "src": false }, { "desc": "Direção sob chuva", "src": false } ], 
    "eventos2":	[ { "desc": " 223|SAIDA PDV|435776||", "aprProc": " PDV:435776" }, 
    					{ "desc": " 223|SAIDA PDV|435776||", "aprProc": " PDV:435776" } 
    			    ]		

    Para criar a classe de acordo com o "json" você pode copiar gerar aqui:
    http://json2csharp.com/

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Marcado como Resposta Jose Geraldo segunda-feira, 25 de abril de 2016 18:39
    segunda-feira, 25 de abril de 2016 18:33
  • Copie o código do seu JSON, abra o VS e crie uma classe, depois no menu do VS faça como na imagem abaixo que vai gerar sua classe c# baseada no seu JSON, veja:


    • Editado Poliana Dias segunda-feira, 25 de abril de 2016 18:37
    • Marcado como Resposta Jose Geraldo segunda-feira, 25 de abril de 2016 18:48
    segunda-feira, 25 de abril de 2016 18:36
  • Valeu ai pelas respostas.

    bom trabalho a todos.

    segunda-feira, 25 de abril de 2016 18:48
  • Olhe essa lib open source para esse tipo de conversão.

    http://www.newtonsoft.com/json

    Att,


    Desenvolvedor - Senior

    segunda-feira, 25 de abril de 2016 19:04