Como Serializar Objetos em XML com .NET

Postado por Daniel Garcia às 01:11 SEXTA-FEIRA, 24 DE JULHO DE 2009

Eventualmente, no desenvolvimento de aplicações, encontramos situações onde é necessário transformar um objeto em XML, ou seja, serializar um objeto em XML. Neste post mostrarei como serializar e deserializar objetos de forma simples com .NET.

O .NET Framework oferece “N” recursos para efetuar a serialização de objetos. Neste exemplo utilizarei o XmlSerializer (do namespace System.Xml.Serialization) para efetuar esta tarefa.
Vejas os passos para efetuar esta tarefa:

1 – Crie uma classe (entidade) para que possamos utilizar como teste. Como exemplo, criei uma classe chamada Produto:

public class Produto
{
    private int id;
    private string nome;
    private decimal valor;   

    public int Id
    {
        get { return id; }
        set { id = value; }
    }
 

    public string Nome
    {
        get { return nome; }
        set { nome = value; }
    }

    public decimal Valor
    {
        get { return valor; }
        set { valor = value; }
    }

    public Produto()
    {

    }

    public Produto(int id, string nome, decimal valor)
    {
        this.id = id;
        this.nome = nome;
        this.valor = valor;
    }
}

2 – Crei uma classe chamada Serializador, que será responsável pelas tarefas de Serializar e Deserializar os objetos:

using System;
using System.IO;
using System.Xml.Serialization;

public class Serializador
{
    // Serializa o objeto
    public static string Serializar(object objeto)
    {
        StringWriter writer = new StringWriter();
        XmlSerializer serializer = new XmlSerializer(objeto.GetType());

        serializer.Serialize(writer, objeto);

        return writer.ToString();
    }
    

    // Deserializa o objeto
    public static object Deserializar(string xml, Type tipo)
    {
        StringReader reader = new StringReader(xml);
        XmlSerializer serializer = new XmlSerializer(tipo);

        return serializer.Deserialize(reader);
    }
}

3 – Por fim, crie um Webform contendo um TextBox do tipo MultiLine e uma tabela com três Labels (Id, Nome e Valor), para que possamos testar os métodos da classe Serializador:

Veja o código Source do Webform:

<form id="form1" runat="server">
<div>
   
<b>Conteúdo Serializado</b><br />
   
<asp:TextBox ID="TextBox1" runat="server" Height="140px" TextMode="MultiLine" Width="550px"></asp:TextBox>
   
<br />
   
<br />
   
<b>Conteúdo Deserializado</b>
    <
br />
   
<table>
       
<tr>
           
<td>Código</td>
           
<td>&nbsp;</td>
           
<td><asp:Label ID="lblId" runat="server"></asp:Label></td>
       
</tr>
        
<tr>
           
<td>Nome</td>
           
<td>&nbsp;</td>
           
<td><asp:Label ID="lblNome" runat="server"></asp:Label></td>
       
</tr>
       
<tr>
           
<td>Valor</td>
           
<td>&nbsp;</td>
           
<td><asp:Label ID="lblValor" runat="server"></asp:Label></td>
        
</tr>
   
</table>
</div>
</form>

Veja o código implementado para testar as funcionalidades no Webform:

protected void Page_Load(object sender, EventArgs e)
{

    // Serializando
    Produto produto = new Produto(1, "Produto 1", 15);    TextBox1.Text =

    Serializador.Serializar(produto);

    // Deserializando
    produto = (Produto)Serializador.Deserializar(TextBox1.Text, typeof(Produto));

    lblId.Text = produto.Id.ToString();
    lblNome.Text = produto.Nome;
    lblValor.Text = produto.Valor.ToString();

}

Executando o projeto veremos o seguinte resultado:


Resultado da execução do webform de teste de serialização e deserialização

Viram com é possível serializar e deserializar objetos utilizando de muito pouco esforço o .NET framework?

Até a próxima e bons códigos!

5.0 ponto(s). Avaliado por 2 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | .NET Framework

Comentários

Comentar


(Vai mostrar seu Gravatar)  

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Sobre o Autor

Daniel Garcia - MCP, MCTS, MCPD
Meu nome é Daniel Garcia, venho atuando no mercado de tecnologia há mais de uma década. Durante esse tempo tive a oportunidade de trabalhar com diversas tecnologias, principalmente Microsoft. Conquistei os títulos: MCP, MCTS, MCDP e MCT. Desde então, venho contribuindo com toda a Comunidade, divulgando meu conhecimento das tecnologias Microsoft.