Я собираю XDocument и сериализую его в строку UTF8 со следующим кодом:
string xmlString = "";
using (MemoryStream ms = new MemoryStream())
{
using (XmlWriter xw = new XmlTextWriter(ms, Encoding.UTF8))
{
doc.Save(xw);
xw.Flush();
StreamReader sr = new StreamReader(ms);
ms.Seek(0, SeekOrigin.Begin);
xmlString = sr.ReadToEnd();
}
}
Это сработало нормально.
Затем мне нужно было переключить, был ли декларатор сериализован в строку. Я изменил код на это:
string xmlString = "";
using (MemoryStream ms = new MemoryStream())
{
XmlWriterSettings settings = new XmlWriterSettings()
{
OmitXmlDeclaration = !root.IncludeDeclarator,
Encoding = Encoding.UTF8
};
using (XmlWriter xw = XmlTextWriter.Create(ms, settings))
{
doc.Save(xw);
xw.Flush();
StreamReader sr = new StreamReader(ms);
ms.Seek(0, SeekOrigin.Begin);
xmlString = sr.ReadToEnd();
}
}
Это вызывает следующее исключение в doc.Save (xw):
Префикс '' нельзя переопределить из
'' в my_schema_here 'в том же
тег начального элемента.
Я пытаюсь выяснить, почему XDoc можно сохранить, если писатель «новый», но не если он «.Create» d. Есть идеи?
Jordon