C# 如果以某种方式声明XmlTextWriter,则命名空间重新定义异常

C# 如果以某种方式声明XmlTextWriter,则命名空间重新定义异常,c#,xml,linq-to-xml,xmlwriter,C#,Xml,Linq To Xml,Xmlwriter,我正在构建一个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

我正在构建一个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

我通过将名称空间添加到XDocument中根元素的名称中,解决了这个问题。不过,奇怪的是,如果使用“newXMLTextWriter()”而不是“XmlTextWriter.Create()”或“XmlWriter.Create()”,则不需要这样做


Jordon

我不知道问题的原因,但不要使用“new XmlTextWriter()”。自.NEt 2.0以来,它一直被弃用。改用XmlWriter.Create。事实上,不要使用XmlTextWriter。也不要创建。