Serializando e deserializando objetos

<< Click to Display Table of Contents >>

Navigation:  Outros >

Serializando e deserializando objetos

Previous pageReturn to chapter overviewNext page

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,