none
"Deserializar" JSON RRS feed

  • Pregunta

  • Muy buenas!

    Tengo un problema con un JSON que no se cómo "deserializar". Quiero decir, se cómo hacerlo, pero es para un caso particular, y es que un objeto puede tener un número variable de campos. Me explico con código:

    "body":
    	 [
    	 {
    	 "type":"String",
    	 "plain":"ASDF "
    	 },
    	 {
    	 "type":"ExternalURL",
    	 "plain":"http:\/\/www.url.com",
    	 "url":"http:\/\/www.url.com",
    	 "favicon":"http:\/\/bin.images.url.com"
    	 }
    	 ]

    Como veis, el "body" es una lista de objetos variables. No tengo ni idea de cómo hacer esto. He intentado hacer un objeto que tuviera los 4 campos y peta. Uno con los 2 comunes y también. Uno con los dos comunes y otro que herede de él y tenga los 2 que faltan. Pero será que estoy ofuscado, pues no veo cómo enlazar ambos de manera automática. Y el JSON lo obtengo de una página (es decir, no tengo manera de cambiarlo)

    Estoy programando para windows phone 7.0 y usando DataContracJsonSerializer

    Muchas gracias de antemano!

    lunes, 30 de mayo de 2011 21:53

Respuestas

  • Hola el problema que tienes es que el formato del JSON esta mal formado debería quedar como sigue, falta abrir con "{" y cerrar con "}":

     

    {"body":
    	 [
    	 {
    	 "type":"String",
    	 "plain":"ASDF "
    	 },
    	 {
    	 "type":"ExternalURL",
    	 "plain":"http:\/\/www.url.com",
    	 "url":"http:\/\/www.url.com",
    	 "favicon":"http:\/\/bin.images.url.com"
    	 }
    
    ]
    }
    Aparte te adjunto una fragmento de código para que definas las clases que después puedes leer: con DataContracJsonSerializer.
     public class prueba
      {
        public string type { get; set; }
        public string plain { get; set; }
        public string url { get; set; }
        public string favicon { get; set; }
      }
    
      public class Contrato
      {
        
        public List<prueba> body { get; set; }
      }
    
    Saludos,


    phurtado
    martes, 21 de junio de 2011 18:17