Я нашел гораздо более элегантный способ сделать это: просто вызовите WriteStartDocument(true)
на вашем XmlWriter
экземпляре - этот код сериализует data
и выводит полученный XML на консоль.
Во-первых, если вы используете StringWriter
, вам нужно немного его настроить, чтобы заставить UTF-8, но имейте это в виду :
При сериализации XML-документа в строку .NET кодировка должна быть установлена в UTF-16. Строки хранятся как UTF-16 внутри, так что это единственная кодировка, которая имеет смысл. Если вы хотите хранить данные в другой кодировке, вместо этого вы используете байтовый массив.
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)
действительно выглядит как идиоматический способ указания standalone=true
. Выходной заголовок выглядит так:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>