quinta-feira, 28 de maio de 2009

C# - Serializando objetos com xml

Nesse artigo será tratado um problema que encontramos na maioria das soluções comerciais e geralmente não se utiliza a solução mais adequada. Quando temos que trabalhar com objetos que gostaríamos de serializar e recuperar suas informações existem diferentes maneiras de realizar essa operação.

Uma das soluções é trabalharmos com serialização no formato xml que irá facilitar na comunicação com outros sistemas e extensibilidade da informação que estaremos gravando/recuperando em algumas das operações do nosso sistema.

A solução que iremos demonstrar é uma aplicação Console que realiza a serialização de uma estrutura onde iremos armazenar o usuário e o nome da máquina informados, além de registrar um log de horário para cada execução do programa.

Primeiramente deveremos definir a estrutura que gostaríamos de serializar através de uma classe. Nesse caso serão 2 classes:
  • Registro de execução (Login)
  • Dados do usuário (Configuration)

   1:  public class Login

   2:  {

   3:      public DateTime DateTime { get; set; }

   4:  }

   5:  public class Configuration

   6:  {

   7:      public string UserName { get; set; }

   8:      public string MachineName { get; set; }

   9:      public Login[] Logins { get; set; }

  10:  }

Porém para a serialização é necessário decorarmos a estrutura com atributos de serialização xml do namespace System.Xml.Serialization.

   1:  [XmlRoot("SystemConfiguration")]

   2:  public class Configuration

   3:  {

   4:      [XmlElement("UserName")]

   5:      public string UserName { get; set; }

   6:      [XmlElement("MachineName")]

   7:      public string MachineName { get; set; }

   8:      [XmlArray("Logins")]

   9:      [XmlArrayItem("Login", typeof(Login))]

  10:      public Login[] Logins { get; set; }

  11:  }

  12:  public class Login

  13:  {

  14:      [XmlElement("DateTime")]

  15:      public DateTime DateTime { get; set; }

  16:  }

De forma declarativa através de atributos estaremos definindo a estrutura do nosso objeto serializado. No exemplo estaremos tratando as informações como elementos no xml, mas poderíamos alterar o atributo XmlElement para XmlAttribute e alterar a estrutura do xml.

Após isso, só resta realizar as operações de serialização e deserialização do objeto e do xml respectivamente.

Operação de serialização

   1:  XmlSerializer serializer = new XmlSerializer(typeof(Data.Configuration));

   2:  StreamWriter sW = new StreamWriter(PathConfigurationFile);

   3:  serializer.Serialize(sW, config);

   4:  sW.Close();

Operação de deserialização

   1:  XmlSerializer serializer = new XmlSerializer(typeof(Data.Configuration));

   2:  StreamReader sR = new StreamReader(PathConfigurationFile);

   3:  Data.Configuration config = (Data.Configuration)serializer.Deserialize(sR);

   4:  sR.Close();

Segue abaixo vídeo que exibe passo-a-passo a solução:


Código fonte para download: clique aqui

Detalhes do ambiente de desenvolvimento
  • Linguagem: C#

  • Framework: .NET Framework 3.5 SP 1

  • Ferramenta: Visual Studio 2008 Development Edition

  • Sistema Operacional: Windows XP SP2

sexta-feira, 22 de maio de 2009

WPF - Utilizando o componente NotifyIcon

Nesse primeiro post será tratado um problema trivial e que sempre enfrentamos em aplicações clientes. Após minimizar ou fechar a aplicação podemos necessitar incluir um ícone na área de notificação de status da barra de tarefas do Windows para um acesso rápido.

Para a resolução do problema foi utilizado o componente NotifyIcon do namespace System.Windows.Forms. Nesse post foi utilizado WPF, mas pode ser utilizado também com Windows Forms.

O resultado final pode ser visto abaixo:

Assista o vídeo abaixo com um tempo total de 8 minutos descrevendo todos os passos para incluir na sua aplicação.


Código fonte para download: clique aqui

Detalhes do ambiente de desenvolvimento
  • Linguagem: C#

  • Framework: .NET Framework 3.5 SP 1

  • Ferramenta: Visual Studio 2008 Development Edition

  • Sistema Operacional: Windows XP SP2

terça-feira, 19 de maio de 2009

Inauguração

Inaugurado o blog que vai ter como principal objetivo solucionar problemas reais do dia-a-dia utilizando as tecnologias Microsoft.

Está aberta para toda a comunidade interessada por procurar soluções ou resolver os problemas de outros profissionais.