Logo depois de eu escrever o post anterior sobre XML Axis Properties e LINQ eu fico sabendo desse novo projeto da Microsoft, ainda em Alpha, mas liberado para a comunidade: Linq To XSD. Como o projeto ainda está muito no começo, esse nome pode não ficar.

Ele oferece uma solução de X/O Mapping, ou seja, mapeamento XML para Objeto. Ele cria objetos para o seu XML. E o legal é que ele o faz a partir de um schema XSD, e mantém suas restrições, tipos e outros detalhes. Por exemplo, vocês devem ter notado que tive que fazer cast para recuperar uma propriedade booleana do XML:

   10         Dim blnLogLigado As Boolean = CBool(consultaXML.<app>.@logLigado)

Com LINQ to XSD isso não precisaria ser feito. Veja como fica:

   14         static void Main(string[] args)

   15         {

   16 

   17             var ArquivoXML = Path.Combine(

   18                 Directory.GetParent

   19                 (

   20                     Path.GetDirectoryName

   21                     (

   22                         Assembly.GetExecutingAssembly().Location

   23                     )

   24                 ).Parent.FullName,

   25                 @"configuracoes.xml");

   26             var config = algumacoisa.configuracoes.Load(ArquivoXML);

   27             Console.WriteLine(@"O id da aplicação é ""{0}"" e o log está {1}.",

   28                 config.app.appId.ToString(),

   29                 config.app.logLigado ? "ligado" : "desligado");

   30 

   31             Console.WriteLine("Caminhos:");

   32 

   33             foreach (var caminho in config.caminhosDePesquisa.caminho)

   34             {

   35                 Console.WriteLine(@"O endereço ""{0}"" está {1}.",

   36                     caminho.enderecoFisico,

   37                     caminho.habilitado ? "habilitado" : "desabilitado");

   38             }   

   39         }

O problema foi corrigido. Note que os dados AppID e LogLigado já estão convertidos para o tipo correto (linhas 28 e 29).

Ah, é legal observar, já que falei do VB no post anterior, que isso praticamente resolve o problema de acesso ao XML que o C# tinha antes, apesar de ainda estarem em fase Alpha e sem previsão de lançamento.

E como eu não tinha mostrado ainda o resultado final, segue abaixo:

ResultadoLinqToXSD

Se quiserem saber mais comentem aqui no blog que eu dou uma aprofundada. 

Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.