<< Click to Display Table of Contents >> Serializando e deserializando objetos |
![]() ![]() ![]() |
Cliente.cs
using System;
using System.Collections.Generic;
[Serializable]
public class Telefone
{
public string Numero { get; set; }
// precisa ter um construtor vazio - exigência da serialização
public Telefone()
{
}
public Telefone(string numero)
{
this.Numero = numero;
}
}
[Serializable]
public class Cliente
{
public int Id { get; set; }
public string Nome { get; set; }
public decimal Limite { get; set; }
public List<Telefone> Fone { get; set; } // cliente tem vários telefones
public DateTime Data { get; set; }
// precisa ter um construtor vazio - exigência da serialização
public Cliente()
{
}
}
Serializador.cs
using System;
using System.IO;
using System.Xml.Serialization;
class Serializador
{
// método para serialização do objeto (transforma em xml)
public static string Serializar(object objeto)
{
StringWriter writer = new StringWriter();
XmlSerializer xml = new XmlSerializer(objeto.GetType());
xml.Serialize(writer, objeto);
return writer.ToString();
}
// transforma xml em objeto
public static object Deserializar(string xml, Type tipo)
{
StringReader reader = new StringReader(xml);
XmlSerializer serializer = new XmlSerializer(tipo);
return serializer.Deserialize(reader);
}
}
Program.cs
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
// cria uma list de telefone
List<Telefone> fones = new List<Telefone>();
fones.Add(new Telefone("8827-1828"));
fones.Add(new Telefone("3439-8229"));
// cria um cliente
Cliente cliente = new Cliente() { Id = 1, Nome = "Junior", Data = DateTime.Now, Limite = 100, Fone = fones };
// serializando
string xml = Serializador.Serializar(cliente);
Console.WriteLine(xml);
Console.ReadLine();
// deserializar
Cliente novo = (Cliente)Serializador.Deserializar(xml, typeof(Cliente));
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(novo.Id.ToString() + " - " + novo.Nome.ToString());
Console.ReadLine();
// #fim#!
// ----------------- teste com List<Cliente>
List<Telefone> fones1 = new List<Telefone>();
fones1.Add(new Telefone("1111-1111"));
List<Telefone> fones2 = new List<Telefone>();
fones2.Add(new Telefone("2222-2222"));
fones2.Add(new Telefone("3333-3333"));
List<Telefone> fones3 = new List<Telefone>();
fones3.Add(new Telefone("4444-4444"));
fones3.Add(new Telefone("5555-5555"));
fones3.Add(new Telefone("6666-6666"));
fones3.Add(new Telefone("7777-7777"));
// cria a list de cliente
List<Cliente> lista = new List<Cliente>();
lista.Add(new Cliente() { Id = 1, Nome = "Angelina", Data = DateTime.Now, Limite = (decimal)100.12, Fone = fones1 });
lista.Add(new Cliente() { Id = 2, Nome = "Scarlet", Data = DateTime.Now, Limite = (decimal)1.99, Fone = fones2 });
lista.Add(new Cliente() { Id = 3, Nome = "Inara", Data = DateTime.Now, Limite = (decimal)0.2, Fone = fones3 });
// serializa a list
xml = Serializador.Serializar(lista);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine(xml);
Console.ReadLine();
// deserializa a list
Console.ForegroundColor = ConsoleColor.White;
List<Cliente> novaLista = (List<Cliente>)Serializador.Deserializar(xml, typeof(List<Cliente>));
foreach (Cliente c in novaLista)
{
Console.Write("\nId: " + c.Id.ToString() + " Nome: " + c.Nome + " Fones: ");
foreach (Telefone t in c.Fone)
{
Console.Write(t.Numero + ",");
}
}
Console.ReadLine();
}
}
Saída
<?xml version="1.0" encoding="utf-16"?>
<Cliente xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Id>1</Id>
<Nome>Junior</Nome>
<Limite>100</Limite>
<Fone>
<Telefone>
<Numero>8827-1828</Numero>
</Telefone>
<Telefone>
<Numero>3439-8229</Numero>
</Telefone>
</Fone>
<Data>2011-03-02T14:00:03.8271484-03:00</Data>
</Cliente>
1 - Junior
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfCliente xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Cliente>
<Id>1</Id>
<Nome>Angelina</Nome>
<Limite>100.12</Limite>
<Fone>
<Telefone>
<Numero>1111-1111</Numero>
</Telefone>
</Fone>
<Data>2011-03-02T14:00:09.6035156-03:00</Data>
</Cliente>
<Cliente>
<Id>2</Id>
<Nome>Scarlet</Nome>
<Limite>1.99</Limite>
<Fone>
<Telefone>
<Numero>2222-2222</Numero>
</Telefone>
<Telefone>
<Numero>3333-3333</Numero>
</Telefone>
</Fone>
<Data>2011-03-02T14:00:09.6035156-03:00</Data>
</Cliente>
<Cliente>
<Id>3</Id>
<Nome>Inara</Nome>
<Limite>0.2</Limite>
<Fone>
<Telefone>
<Numero>4444-4444</Numero>
</Telefone>
<Telefone>
<Numero>5555-5555</Numero>
</Telefone>
<Telefone>
<Numero>6666-6666</Numero>
</Telefone>
<Telefone>
<Numero>7777-7777</Numero>
</Telefone>
</Fone>
<Data>2011-03-02T14:00:09.6035156-03:00</Data>
</Cliente>
</ArrayOfCliente>
Id: 1 Nome: Angelina Fones: 1111-1111,
Id: 2 Nome: Scarlet Fones: 2222-2222,3333-3333,
Id: 3 Nome: Inara Fones: 4444-4444,5555-5555,6666-6666,7777-7777,