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