Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将XML序列化为导致畸形的文件?_C#_Xml_Serialization_Xml Serialization - Fatal编程技术网

C# 将XML序列化为导致畸形的文件?

C# 将XML序列化为导致畸形的文件?,c#,xml,serialization,xml-serialization,C#,Xml,Serialization,Xml Serialization,我正在尝试序列化XML并创建一个文件。我正在从一个使用XSD.exe从XSD自动生成的对象序列化。该文件可以正常处理和创建。但是每当我在验证工具上运行它时,我就会得到一个错误Prolog中不允许的内容 我猜在xml声明之前有一些格式错误的字符,但我看不到它们,也看不到任何字节。以下是我序列化和创建XML文档的代码: XmlSerializer ser = new XmlSerializer(typeof(ContinuityOfCareRecord)); XmlWrite

我正在尝试序列化XML并创建一个文件。我正在从一个使用XSD.exe从XSD自动生成的对象序列化。该文件可以正常处理和创建。但是每当我在验证工具上运行它时,我就会得到一个错误Prolog中不允许的内容

我猜在xml声明之前有一些格式错误的字符,但我看不到它们,也看不到任何字节。以下是我序列化和创建XML文档的代码:

XmlSerializer ser = new XmlSerializer(typeof(ContinuityOfCareRecord));
            XmlWriterSettings settings = new XmlWriterSettings()
            {
                Encoding = Encoding.UTF8,
                ConformanceLevel = ConformanceLevel.Document,
                OmitXmlDeclaration = false,
                Indent = true,
                NewLineChars = "\n",
                CloseOutput = true,
                NewLineHandling = NewLineHandling.Replace,
                CheckCharacters = true
            };
using (XmlWriter myWriter = XmlWriter.Create(ms, settings))
            {
                myWriter.Flush();
                //myWriter.WriteProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"ccr.xsl\"");
                ser.Serialize(myWriter, myCCR);
            }
看起来很简单,但如果输出XML文件的开头有格式错误的字符,如何删除这些字符

XML文档的开头是这样的:


testccr

看起来是正确的,但验证器就是不喜欢它。我一整天都在办公桌上忙这个,所以任何示例代码都会非常有用


谢谢

看起来BOM字符有问题,以这种方式编写代码有助于:

using (XmlTextWriter myWriter = new XmlTextWriter(ms, new System.Text.UTF8Encoding(false)))
        {
            myWriter.Flush();
            //myWriter.WriteProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"ccr.xsl\"");
            ser.Serialize(myWriter, myCCR);
        }

这将删除BOM字符,文件将以UTF-8编码,而不包含BOM。

您运行的验证工具是什么?您能将XML反序列化回C#中的对象而不出错吗?我遗漏了什么吗?我以为您无法创建XMLWriter的实例。实际上,我在那条线上遇到了一个错误。。