Znalazłem wiele bardziej elegancki sposób to zrobić: wystarczy zadzwonić WriteStartDocument(true)
na przykład XmlWriter
- ten kod serializes data
i wysyła wynikowy XML do konsoli.
Po pierwsze, jeśli używasz StringWriter
trzeba go podkręcić trochę do zmuszenia UTF-8, ale keep this in mind:
Kiedy SZEREGOWANIE dokumentu XML na ciąg .NET, kodowanie musi ustawić na UTF-16. Ciągi są przechowywane wewnętrznie w UTF-16, więc jest to jedyne kodowanie, które ma sens. Jeśli chcesz przechowywać dane w innym kodowaniu, używaj zamiast tego tablicy bajtów.
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)
naprawdę czuje się jak idiomatycznym sposobu określania standalone=true
. Pozycja wyjściowa wygląda następująco:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
Dziękuję, że nie jest jeszcze tak eleganckie, jak bym miał nadzieję, ale wciąż jest lepszy niż .replace („ Xml version =” „1.0” „encoding =” "utf-8" "?>", " xml version =" "1.0" "encoding =" "utf-8" "standalone =" "yes" "?>"). lol –
Możesz użyć xmlriter.WriteStartDocument (true); –
@HasaniBlackwell ugh, właśnie zauważyłem ten komentarz ....... to byłaby odpowiedź, której szukałem! –