读取XML文件时出错

Sam*_*Sam 3 c# xml serialization xml-serialization linq-to-xml

            Person person = GetPerson();
            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
            ns.Add(string.Empty, string.Empty);
            XmlSerializer serializer = new XmlSerializer(typeof(Person));
            string personText = string.Empty;
            using (MemoryStream memoryStream = new MemoryStream())
            {
                using (XmlWriter xmlWriter = XmlWriter.Create(memoryStream, new XmlWriterSettings() { Encoding = Encoding.UTF8 }))
                {
                    serializer.Serialize(xmlWriter, person, ns);
                    xmlWriter.Flush();
                    personText = Encoding.UTF8.GetString(memoryStream.ToArray());
                }
            }

            string path = @"D:\person.xml";
// Write method 1:
            File.WriteAllText(path, personText);

// Write method 2:
            using (StreamWriter streamWriter = new StreamWriter(path, false , Encoding.UTF8))
            {
                streamWriter.Write(personText);
            }

// Read the xml
            using (FileStream fileStream = new FileStream(path, FileMode.Open))
            {
                return XDocument.Load(XmlReader.Create(fileStream));
            }
Run Code Online (Sandbox Code Playgroud)

当我使用方法2写入后读取xml时,我在根级别获取此数据无效.第1行,位置1.但是使用方法1可以正常工作.

是什么造成的?任何指针赞赏.

Jon*_*eet 7

问题是,无论是StreamWriter XmlWriter添加了一个字节顺序标记.

选项:

  • 将BOM从字符串personText开始
  • 通过new UTF8Encoding(false)而不是Encoding.UTF8为了StreamWriter
  • 通过new UTF8Encoding(false)而不是Encoding.UTF8为了XmlWriter
  • 避免将摆在首位的文本,然后再返回:你已经得到的二进制数据MemoryStream,为什么不直接转储磁盘?