he encontrado una manera mucho más elegante de hacer esto: sólo tiene que llamar WriteStartDocument(true)
en su XmlWriter
ejemplo - el código serializa data
y emite el XML resultante a la consola.
En primer lugar, si usted está usando un StringWriter
necesita ajustar un poco para obligar a UTF-8, pero keep this in mind:
Cuando serialising un documento XML en una cadena NET, la codificación debe establecerse en UTF-16. Las cadenas se almacenan como UTF-16 internamente, por lo que esta es la única codificación que tiene sentido. Si desea almacenar datos en una codificación diferente, en su lugar utiliza una matriz de bytes.
public sealed class Utf8StringWriter : StringWriter
{
public override Encoding Encoding { get { return Encoding.UTF8; } }
}
using (var sw = new Utf8StringWriter())
using (var xw= XmlWriter.Create(sw, new XmlWriterSettings{Indent = true}))
{
xw.WriteStartDocument(true); // that bool parameter is called "standalone"
var namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
var xmlSerializer = new XmlSerializer(typeof(data));
xmlSerializer.Serialize(xw, data);
Console.WriteLine(sw.ToString());
}
WriteStartDocument(true)
realmente se siente como la forma idiomática de especificar standalone=true
. El encabezado de salida es el siguiente:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
Gracias, eso todavía no es tan elegante como yo habría esperado, pero sigue siendo mejor que .Colocar (" Xml version =" "1.0" "encoding =" "utf-8" "?>", " xml version =" "1.0" "encoding =" "utf-8" "standalone =" "yes" "?>"). lol –
Puede usar xmlriter.WriteStartDocument (true); –
@HasaniBlackwell ugh, justo ahora noto ese comentario ... ¡esa hubiera sido la respuesta que estaba buscando! –