Ejercicio: realizar una serialización que nos guarde las notas de un determinado alumno:
Boletín notas: martes, 6 de mayo de 2014 *************************************************************** Juanjo Pedraza C/ Perico Palotes, 33 03740 Gata de Gorgos (Alicante) Asignatura Ev1 Ev2 Ev3 Media --------------------------------------------------------------- Entornos Desarrollo 3 2 1 2 Religión 10 8 9 9 --------------------------------------------------------------- Firma entregado **************************** * * * * ****************************
Ejemplo de Orden de Pedido.
using System; using System.Xml; using System.Xml.Serialization; using System.IO; [XmlRootAttribute("OrdenPedido", Namespace="http://www.csharp.com.es", IsNullable = false)] public class OrdenPedido { public Direccion EnviarA; public string FechaOrden; [XmlArrayAttribute("Items")] public LineasPedido[] LineasPedidos; public decimal SubTotal; public decimal CosteEntrega; public decimal CosteTotal; } public class Direccion { [XmlAttribute] public string Nombre; public string Linea1; // Avisamos a XmlSerializer que el atributo XML // no aparezca si los campos están a nulos [XmlElementAttribute(IsNullable = false)] public string Poblacion; public string Provincia; public string CodigoPostal; } public class LineasPedido { public string LineaPedido; public string Descripcion; public decimal PrecioUnitario; public int Cantidad; public decimal TotalLinea; // Calculamos el precio por línea y lo guardamos public void Calcular() { TotalLinea = PrecioUnitario * Cantidad; } } public class Test { public static void Main() { // Escribimos y leemos el pedido Test t = new Test(); t.CreamosOrdenPedido("OrdenPedido.xml"); t.LeemosOrdenPedido("OrdenPedido.xml"); Console.ReadKey(); } private void CreamosOrdenPedido(string fichero) { XmlSerializer serializer = new XmlSerializer(typeof(OrdenPedido)); TextWriter writer = new StreamWriter(fichero); OrdenPedido op=new OrdenPedido(); Direccion DireccionFactura = new Direccion(); DireccionFactura.Nombre = "Juanjo Pedraza"; DireccionFactura.Linea1 = "C/ Perico Palotes, 33."; DireccionFactura.Poblacion = "Gata de Gorgos"; DireccionFactura.Provincia = "Alicante"; DireccionFactura.CodigoPostal = "03740"; op.EnviarA = DireccionFactura; op.FechaOrden = System.DateTime.Now.ToLongDateString(); // Creamos líneas de pedido LineasPedido i1 = new LineasPedido(); i1.LineaPedido = "MORCI"; i1.Descripcion = "Morcillas de cebolla"; i1.PrecioUnitario = (decimal) 5.23; i1.Cantidad = 3; i1.Calcular(); // La insertamos en un array LineasPedido [] items = {i1}; op.LineasPedidos = items; // Calculamos el total decimal subTotal = new decimal(); foreach(LineasPedido oi in items) { subTotal += oi.TotalLinea; } op.SubTotal = subTotal; op.CosteEntrega = (decimal) 12.51; op.CosteTotal = op.SubTotal + op.CosteEntrega; serializer.Serialize(writer, op); writer.Close(); } protected void LeemosOrdenPedido(string fichero) { XmlSerializer serializer = new XmlSerializer(typeof(OrdenPedido)); serializer.UnknownNode+= new XmlNodeEventHandler(serializer_UnknownNode); serializer.UnknownAttribute+= new XmlAttributeEventHandler(serializer_UnknownAttribute); FileStream fs = new FileStream(fichero, FileMode.Open); OrdenPedido op; op = (OrdenPedido) serializer.Deserialize(fs); Console.WriteLine ("Fecha Orden: " + op.FechaOrden); Direccion EnviarA = op.EnviarA; ReadDireccion(EnviarA, "Enviar a:"); LineasPedido [] items = op.LineasPedidos; Console.WriteLine("Líneas de la factura:"); foreach(LineasPedido oi in items) { Console.WriteLine("\t"+ oi.LineaPedido + "\t" + oi.Descripcion + "\t" + oi.PrecioUnitario + "\t" + oi.Cantidad + "\t" + oi.TotalLinea); } Console.WriteLine( "\n\t\t\t\t\t Subtotal\t" + op.SubTotal + "\n\t\t\t\t\t Transporte\t" + op.CosteEntrega + "\n\t\t\t\t\t Total\t\t" + op.CosteTotal ); } protected void ReadDireccion(Direccion a, string label) { // Leemos campos de la dirección Console.WriteLine(label); Console.Write("\t"+ a.Nombre +"\n\t" + a.Linea1 +"\n\t" + a.Poblacion +"\t" + a.Provincia +"\n\t" + a.CodigoPostal +"\n"); } protected void serializer_UnknownNode (object sender, XmlNodeEventArgs e) { Console.WriteLine("Nodo desconocido:" + e.Name + "\t" + e.Text); } protected void serializer_UnknownAttribute (object sender, XmlAttributeEventArgs e) { System.Xml.XmlAttribute attr = e.Attr; Console.WriteLine("Atributo desconocido " + attr.Name + "='" + attr.Value + "'"); } }
Fecha Orden: martes, 6 de mayo de 2014 Enviar a: Juanjo Pedraza C/ Perico Palotes, 33. Gata de Gorgos Alicante 03740 Líneas de la factura: MORCI Morcillas de cebolla 5,23 3 15,69 Subtotal 15,69 Transporte 12,51 Total 28,20