Как сказал Ричард, StringWriter
- это путь вперед. Однако есть одна загвоздка: по умолчанию StringWriter
будет объявлять себя как UTF-16. Обычно XML находится в UTF-8. Вы можете исправить это, создав подкласс StringWriter;
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding
{
get { return Encoding.UTF8; }
}
}
Это повлияет на заявление, написанное XmlWriter
. Конечно, если вы затем записываете строку в другом месте в двоичной форме, убедитесь, что вы используете кодировку, которая соответствует любой кодировке, которую вы исправили для StringWriter
. (Приведенный выше код всегда предполагает UTF-8; сделать более общую версию, которая принимает кодировку в конструкторе, тривиально.)
Вы бы тогда использовали:
using (TextWriter writer = new Utf8StringWriter())
{
using (XmlWriter xmlWriter = XmlWriter.Create(writer))
{
...
}
return writer.ToString();
}