Если вы передаете сериализатору XmlWriter, вы можете управлять некоторыми параметрами, такими как кодировка, пропускать ли объявление (например, для фрагмента) и т. Д.
Это не предназначено для того, чтобы быть исчерпывающим руководством, но альтернативой, чтобы вы могли видеть, что происходит, и то, что не просто утешает в первую очередь.
Обратите внимание, что если вы создадите свой XmlWriter с помощью StringBuilder вместо MemoryStream, ваш xml будет игнорировать вашу кодировку и получится в кодировке utf-16. См. Сообщение в блоге написание XML с кодировкой utf8 для получения дополнительной информации.
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings
{
Indent = true,
OmitXmlDeclaration = false,
Encoding = Encoding.UTF8
};
using (MemoryStream memoryStream = new MemoryStream() )
using (XmlWriter xmlWriter = XmlWriter.Create(memoryStream, xmlWriterSettings))
{
var x = new System.Xml.Serialization.XmlSerializer(p.GetType());
x.Serialize(xmlWriter, p);
// we just output back to the console for this demo.
memoryStream.Position = 0; // rewind the stream before reading back.
using( StreamReader sr = new StreamReader(memoryStream))
{
Console.WriteLine(sr.ReadToEnd());
} // note memory stream disposed by StreamReaders Dispose()
}