Início > C#, Dicas / Tips > Serializando objeto para XML

Serializando objeto para XML

Quando estamos desenvolvendo um software, sempre temos a necessidade de parametrizar nosso software, seja no banco de dados, registro ou qualquer outra forma de persistir informações.
Nesse post vou explicar uma forma fácil e rápida de persistir informações, tomando como utilização prática um arquivo de configurações / parâmetros de sistema, além de servir como base para qualquer momento onde você precise serializar um objeto para enviar via web, e etc.

Para isso vamos serializar um objeto para XML.

Continue lendo…

1º: Vamos criar uma classe que contenha os membros que correspondam aos nossos parâmetros, neste exemplo vamos ter:

public class Parametros
    {
        public string PathRecursosdeSistema { get; set; }

        public string PathServidorImpressao { get; set; }

        public string StringConexaoBancoDeDados { get; set; }
    }

Criados os membros básicos vamos implementar os métodos responsáveis pela serialização e desserialização, save e load respectivamente, ficando como abaixo:

    public class Parametros
    {
        #region Membros
        public string PathRecursosdeSistema { get; set; }
        public string PathServidorImpressao { get; set; }

        public string StringConexaoBancoDeDados { get; set; }
        #endregion

        #region Métodos
        /// <summary>
        /// Método que serializa o objeto atual para o caminho especificado no parâmetro file.
        /// </summary>
        /// <param name="file">Indique o caminho e nome do arquivo para serializar o objeto</param>
        public void Gravar(string file = "Parametros.configfile")
        {
            var serializar = new System.Xml.Serialization.XmlSerializer(this.GetType());
            StreamWriter writer = File.CreateText(file);
            serializar.Serialize(writer, this);
            writer.Flush();
            writer.Close();
        }
        /// <summary>
        /// Método estático para desserializar o arquivo informado no parâmetro file.
        /// </summary>
        /// <param name="file">Caminho e nome do arquivo que será desserializado</param>
        /// <returns>Objeto da classe Parametros</returns>
        public static Parametros Carregar(string file = "Parametros.configfile")
        {
            var desserializar = new System.Xml.Serialization.XmlSerializer(typeof(Parametros));
            StreamReader reader = File.OpenText(file);
            Parametros parametrosDesserializado = (Parametros)desserializar.Deserialize(reader);
            reader.Close();
            return parametrosDesserializado;
        }
        #endregion
    }

Se não for informado nenhum path no método Gravar ou no método Carregar, é utilizado o valor default: Parametros.configfile, que busca no mesmo path do executável pelo arquivo.

Criei uma view em WPF e implementei os métodos do botão Load e Salvar:

Tela WPF parãmetros XML

Exemplo de tela

Código XAML:

<Window x:Class="PostConfiguracao.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Parâmetros" Height="350" Width="525">
    <Grid>
        <Label Content="Path Recursos de Sistema:" Height="28" HorizontalAlignment="Left" Margin="12,12,0,0" Name="label1" VerticalAlignment="Top" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="174,14,0,0" Name="txbPathRecursosSistema" VerticalAlignment="Top" Width="317" />
        <Label Content="Path Servidor de Impressão:" Height="28" HorizontalAlignment="Left" Margin="12,61,0,0" Name="label2" VerticalAlignment="Top" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="174,66,0,0" Name="txbPathServidorImpressao" VerticalAlignment="Top" Width="317" />
        <Label Content="String de Conexão com Banco de Dados:" Height="28" HorizontalAlignment="Left" Margin="12,123,0,0" Name="label3" VerticalAlignment="Top" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="12,148,0,0" Name="txbStringconexaoBanco" VerticalAlignment="Top" Width="479" />
        <Button Content="Load" Height="45" HorizontalAlignment="Left" Margin="12,254,0,0" Name="btnLoad" VerticalAlignment="Top" Width="152" />
        <Button Content="Salvar" Height="45" HorizontalAlignment="Left" Margin="339,254,0,0" Name="btnSave" VerticalAlignment="Top" Width="152" />
    </Grid>
</Window>

E por fim a implementação as funcionalidades dessa tela de configuração:


using System.Windows;

namespace PostConfiguracao
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnLoad_Click(object sender, RoutedEventArgs e)
        {
            var parametrosSistema = Parametros.Carregar();

            txbPathRecursosSistema.Text = parametrosSistema.PathRecursosdeSistema;
            txbPathServidorImpressao.Text = parametrosSistema.PathServidorImpressao;
            txbStringconexaoBanco.Text = parametrosSistema.StringConexaoBancoDeDados;
        }

        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            var parametrosSistema = new Parametros();

            parametrosSistema.PathRecursosdeSistema = txbPathRecursosSistema.Text;
            parametrosSistema.PathServidorImpressao = parametrosSistema.PathServidorImpressao;
            parametrosSistema.StringConexaoBancoDeDados = parametrosSistema.StringConexaoBancoDeDados;

            parametrosSistema.Gravar();
        }
    }
}

Espero ter ajudado alguém com essa dica.

Código Fonte:

Anúncios
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixar uma Anotação

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

dotnettips.wordpress.com/

Helping Programmers Since 1994

Viagem e Voo

Dicas para viagens, férias e voos nacionais e internacionais

Ivan Guimarães Meirelles

Analista Desenvolvedor

Void Podcast

Vazio e sem retorno de valor

Elemar DEV

Negócios, tecnologia e desenvolvimento

2,000 Things You Should Know About WPF

Everything a WPF Developer Needs to Know, in Bite-Sized Chunks

blog

so long

Fernando Franzini Blog

Engenharia de Software e Arquitetura Ágil

Gabriel RB.net

Blog técnico, com dicas, códigos, novidades e problemas do dia-a-dia programando.

Alexandre Valente's Blog

Experiências em tecnologia e assuntos diversos

%d blogueiros gostam disto: