Deserializar XML con .NET

Como acabo de finalizar un módulo para uno de mis clientes me ha parecido interesante explicar cómo lo he resuelto por si te puede servir de ayuda.


Necesitaba obtener información de una serie de archivos XML y almacenarla en la base de datos. Todo desarrollador ha tenido que realizar esta operación decena de veces y es que es muy común que un proveedor te facilite la información en formato XML o jSON ya sea en archivos de texto o atacando un Web API o Servicio Web.


Pues bien, teniendo la estructura XML empezamos a trabajar para que .NET pueda poblar un objeto con la información del archivo y así poder almacenarla en la base de datos.


Lo primero que necesitamos es crear las clases que componen el objeto en el que mantendremos la información del XML. Si el archivo XML mantiene una estructura básica podemos crear el objeto a mano, pero si la estructura es compleja, con gran número de elementos padres e hijos lo mejor es usar un pequeño truco de que dispone Visual Studio.


Selecciona todo el texto XML y pulsa Ctrl+C. En Visual Studio pon el cursos donde quieras crear las clases y en el menú accede a Editar -> Pegado especial -> Pegar XML como clases y tendrás creado todo el objeto necesario para procesar la información de la fuente XML. En nuestro caso la clase padre se llamará ObjetoXml.

Ya solo queda deserializar la información:

Dim textoXml as string
For Each archivoXml In Directory.GetFiles(“c:/Carpeta con Xmls")

textoXml = File.ReadAllText(archivoXml)


            Dim serializer = New XmlSerializer(GetType(ObjetoXml))

            Dim objeto As ObjetoXml

            Using reader As TextReader = New StringReader(textoXml)

             objeto = serializer.Deserialize(reader)

            End Using

Next

Y podremos trabajar con los datos consultando las jerarquias tal y como están en la fuente XML. Por ejemplo:


                marca = objeto.hijo1.subhijo1.marca

Una solución fácil a un problema que tiene su dificultad. Y es que el pegado especial te evitará horas de codificación, sobre todo, y como dije anteriormente, cuando la estructura del archivo XML es compleja.


A seguir dándole caña!