Número 53 • noviembre 2008

Visual Basic•C#•ASP.NET•ADO.NET•AJAXSilverlight.NET Framework

dotNetManía

Revista dedicada a los profesionales de la plataforma .NET

Menú

Inicio

Números publicados

Libros

Próximo número (nº54)

Autores

¿Qué es dotNetManía?

Garantía de satisfacción

Contactar

Envíenos su feedback

Pedidos

Suscripciones

Renovaciones

Libros

Publicidad


SP1 de Visual Studio 2008

Patrocinadores

Patrocinador Oro
Microsoft

Patrocinador Plata
Alhambra-Eidos

Patrocinadores Bronce
ABOX
Domitienda
Krasis
Plain Concepts
Raona
Solid Quality Mentors

 

 

 

Nº 6 Julio/Agosto 2004 Serialización de XML Material de apoyo

Por Pedro Pozo
 

La serialización de XML consiste en pasar de un esquema XML a una clase y a la inversa. Pudiendo así gestionar los datos XML como si fueran un objeto, simplificando así el tratamiento de XML complejos.


En la serialización de XML lo mas importante es tener una buen esquema XSD de los XML que queremos tratar

Proyecto

SerializacionXml.zip

 

 

 


Código fuente

<factura>

<nombre>Antonio Gutierrez</nombre>

      <dni>12345678</dni>

      <fecha>20/06/2003</fecha>

      <productos>

            <producto>

                  <numerodeserie>111111111</numerodeserie>

                  <nombreproducto>Teclado ordenador</nombreproducto>

                  <precio>12</precio>

            </producto>

            <producto>

                  <numerodeserie>2222222222</numerodeserie>

                  <nombreproducto>Monitor 17 pulgadas</nombreproducto>

                  <precio>560</precio>

            </producto>

      </productos>

</factura>

 

Fuente 1. XML de ejemplo.

 

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

       <xs:element name="dni" type="xs:string"/>

       <xs:element name="factura">

             <xs:complexType>

                    <xs:sequence>

                           <xs:element ref="nombre"/>

                           <xs:element ref="dni"/>

                           <xs:element ref="fecha"/>

                           <xs:element ref="productos"/>

                    </xs:sequence>

             </xs:complexType>

       </xs:element>

       <xs:element name="fecha" type="xs:date"/>

       <xs:element name="nombre" type="xs:string"/>

       <xs:element name="nombreproducto" type="xs:string"/>

       <xs:element name="numerodeserie" type="xs:string"/>

       <xs:element name="precio" type="xs:decimal"/>

       <xs:element name="producto">

             <xs:complexType>

                    <xs:sequence>

                           <xs:element ref="numerodeserie"/>

                           <xs:element ref="nombreproducto"/>

                           <xs:element ref="precio"/>

                    </xs:sequence>

             </xs:complexType>

       </xs:element>

       <xs:element name="productos">

             <xs:complexType>

                    <xs:sequence>

                           <xs:element ref="producto" maxOccurs="unbounded"/>

                    </xs:sequence>

             </xs:complexType>

       </xs:element>

</xs:schema>

 

Fuente 2. Esquema XSD correspondiente al XML de ejemplo.

 

namespace miclase

{

using System.Xml.Serialization;

       

       /// <remarks/>

       [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]

       public class factura

       {

      

             /// <remarks/>

             public string nombre;

      

             /// <remarks/>

             public string dni;

      

             /// <remarks/>

             [System.Xml.Serialization.XmlElementAttribute(DataType="date")]

             public System.DateTime fecha;

      

             /// <remarks/>

             [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]

             public producto[] productos;

       }

   

       /// <remarks/>

       [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]

       public class producto

       {

      

             /// <remarks/>

             public string numerodeserie;

       

             /// <remarks/>

             public string nombreproducto;

      

             /// <remarks/>

             public System.Decimal precio;

       }

   

       /// <remarks/>

       [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]

       public class productos

       {

      

             /// <remarks/>

             [System.Xml.Serialization.XmlElementAttribute("producto")]

             public producto[] producto;

       }

}

 

Fuente 3.Clase generado a partir del esquema XSD.

 

factura miFactura = new factura();

miFactura.nombre = "Antonio Gutierrez";

miFactura.dni = "1111111111";

miFactura.fecha = DateTime.Now;

 

miFactura.producto = new productos[2];

miProducto = new producto();

miProducto.nombreproducto = "teclado";

miProducto.numerodeserie = "1111";

miProducto.precio = 12;

miFactura.producto[0]=miProducto;

miProducto.nombreproducto = "raton";

miProducto.numerodeserie = "2222";

miProducto.precio = 14;

miFactura.producto[1]=miProducto;

 

TextWriter writer = new StreamWriter(fichero);

serializer.Serialize(writer, miFactura);

writer.Close();

 

Fuente 4.

Volver
 

 

dotNetManía es una revista editada por Netalia. Más información.