[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!!!