[Tips] Quitar los namespaces cuando serializamos con XmlSerializer

Un post corto pero muy útil sí necesitas quitar los namespaces del nodo raíz cuando usas XmlSerializer.

Ejecutando el siguiente código:

XmlSerializer serializer = 
    new XmlSerializer(typeof(Config));
 
using (TextWriter writer = new StreamWriter(@"C:\temp\config.xml"))
{
    serializer.Serialize(writer, config);
}

Obtenemos como resultado:

<?xml version="1.0" encoding="utf-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <solutiond>00000000-0000-0000-0000-000000000000</solutiond>
  <lcid>1033</lcid>
  <projectid>4001</projectid>
  <projecttitle>ProjectTitle</projecttitle>
  <projectdisplayname>ProjectDisplayName</projectdisplayname>
  <projectdescription>ProjectDescription</projectdescription>
  <projectcategory>ProjectCategory</projectcategory>
  <projectthumbnail>ProjectThumbnail.jpg</projectthumbnail>
  <sitemap>
    <sites>
      <Site name="Name" 
            displayname="DisplayName" 
            masterpage="MasterPage" 
            template="Template" 
            includeincurrent="true" 
            includeinglobal="true" 
            inheritcurrent="false" 
            inheritglobal="true" 
            showsiblings="false" 
            showpages="true" 
            showsites="true" />
    </sites>
  </sitemap>
</config>

Como podéis observar, en el nodo config nos aparecen los dichosos namespaces que a veces pueden resultar incomodos. Para quitarlos:

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
 
ns.Add(String.Empty, String.Empty);
 
XmlSerializer serializer =
    new XmlSerializer(typeof(Config));
 
using (TextWriter writer = new StreamWriter(@"C:\temp\config.xml"))
{
    serializer.Serialize(writer, config, ns);
}

Creamos un objeto de la clase XmlSerializerNamespace, añadimos el prefijo y el namespace vacío y usamos la sobrecarga del método Serialize para pasarle el XmlSerializerNamespace que hemos creado y ahora nuestro XML sin namespaces:

<?xml version="1.0" encoding="utf-8"?>
<config>
  <solutiond>00000000-0000-0000-0000-000000000000</solutiond>
  <lcid>1033</lcid>
  <projectid>4001</projectid>
  <projecttitle>ProjectTitle</projecttitle>
  <projectdisplayname>ProjectDisplayName</projectdisplayname>
  <projectdescription>ProjectDescription</projectdescription>
  <projectcategory>ProjectCategory</projectcategory>
  <projectthumbnail>ProjectThumbnail.jpg</projectthumbnail>
  <sitemap>
    <sites>
      <Site name="Name" 
            displayname="DisplayName" 
            masterpage="MasterPage" 
            template="Template" 
            includeincurrent="true" 
            includeinglobal="true" 
            inheritcurrent="false" 
            inheritglobal="true" 
            showsiblings="false" 
            showpages="true" 
            showsites="true" />
    </sites>
  </sitemap>
</config>

¿Más limpio no? Espero que os sirva.

Salu2 y buen fin de semana a todos!!!

Published 23/10/2009 14:33 por Luis Ruiz Pavón
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2009/10/23/tips-quitar-los-namespaces-cuando-serializamos-con-xmlserilizer.aspx