Compartir a través de


Serialización con una declaración XML (LINQ to XML)

En este artículo se describe cómo controlar si se genera una declaración XML al serializar XML en C# o Visual Basic.

La serialización en File o TextWriter mediante el método XElement.Save o el método XDocument.Save genera una declaración XML. Cuando serializa en XmlWriter, la configuración del escritor (especificada en un objeto XmlWriterSettings) determina si se genera una declaración XML.

Si está serializando en una cadena mediante el método ToString, el XML resultante no incluirá una declaración XML.

Ejemplo: Serialización con una declaración XML

En el ejemplo siguiente se crea un XElement, se guarda el documento en un archivo y, a continuación, se imprime el archivo en la consola:

XElement root = new XElement("Root",
    new XElement("Child", "child content")
);
root.Save("Root.xml");
string str = File.ReadAllText("Root.xml");
Console.WriteLine(str);
Dim root As XElement = <Root>
                           <Child>child content</Child>
                       </Root>
root.Save("Root.xml")
Dim str As String = File.ReadAllText("Root.xml")
Console.WriteLine(str)

Este ejemplo produce el siguiente resultado:

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Child>child content</Child>
</Root>

Ejemplo: Serialización sin una declaración XML

En el siguiente ejemplo se muestra cómo guardar un XElement en un XmlWriter.

StringBuilder sb = new StringBuilder();
XmlWriterSettings xws = new XmlWriterSettings();
xws.OmitXmlDeclaration = true;

using (XmlWriter xw = XmlWriter.Create(sb, xws)) {
    XElement root = new XElement("Root",
        new XElement("Child", "child content")
    );
    root.Save(xw);
}
Console.WriteLine(sb.ToString());
Dim sb As StringBuilder = New StringBuilder()
Dim xws As XmlWriterSettings = New XmlWriterSettings()
xws.OmitXmlDeclaration = True

Using xw As XmlWriter = XmlWriter.Create(sb, xws)
    Dim root = <Root>
                   <Child>child content</Child>
               </Root>
    root.Save(xw)
End Using
Console.WriteLine(sb.ToString())

Este ejemplo produce el siguiente resultado:

<Root><Child>child content</Child></Root>