Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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序列化原因-状态EndRootElement中的令牌StartElement将导致无效的XML文档_C#_Xml_Serialization - Fatal编程技术网

C# 连续XML序列化原因-状态EndRootElement中的令牌StartElement将导致无效的XML文档

C# 连续XML序列化原因-状态EndRootElement中的令牌StartElement将导致无效的XML文档,c#,xml,serialization,C#,Xml,Serialization,我正在写入对象的XML序列化文件,该文件由validator.MatchPossiblyValid(字符串输入)方法生成。第一次调用,序列化并写入文件。但是,第二次调用失败,出现异常:System.InvalidOperationException:“状态EndRootElement中的Token StartElement将导致无效的XML文档。如果要编写XML片段,请确保ConformanceLevel设置设置为ConformanceLevel.Fragment或ConformanceLeve

我正在写入对象的XML序列化文件,该文件由
validator.MatchPossiblyValid(字符串输入)
方法生成。第一次调用,序列化并写入文件。但是,第二次调用失败,出现异常:
System.InvalidOperationException:“状态EndRootElement中的Token StartElement将导致无效的XML文档。如果要编写XML片段,请确保ConformanceLevel设置设置为ConformanceLevel.Fragment或ConformanceLevel.Auto

XmlSerializerNamespaces emptyNS = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var serializer = new XmlSerializer(typeof(PDPCustomerInfoInvalid));
var settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
//settings.Indent = true;
using (var stream = new System.IO.StreamWriter(args[1], true))
{
    using (var writer = XmlWriter.Create(stream, settings))
        {

                serializer.Serialize(writer, validator.MatchPossiblyValid("STRING FOR PARSING"), emptyNS);
                stream.Write(Environment.NewLine);
                stream.Flush();
                //Line below throws the exception
                serializer.Serialize(writer, validator.MatchPossiblyValid("STRING FOR PARSING"), emptyNS);
                stream.Write(Environment.NewLine);
                stream.Flush();

        }
}

您正试图使用一个
XmlWriter
创建一个包含多个XML文件的XML文件。但是,XML标准要求每个XML文档都有一个。您的
XmlWriter
正在引发异常,以指示所创建的XML无效。(MCVE.)

如果确实需要将两个XML文档连接到一个文件中,可以使用单独的
XmlWriters
创建,并设置为
false

using (var stream = new System.IO.StreamWriter(args[1], true))
{
    var settings = new XmlWriterSettings();
    settings.OmitXmlDeclaration = true;
    //settings.Indent = true;
    settings.CloseOutput = false;

    using (var writer = XmlWriter.Create(stream, settings))
    {
        serializer.Serialize(writer, validator.MatchPossiblyValid("STRING FOR PARSING"), emptyNS);
    }

    stream.Write(Environment.NewLine);
    stream.Flush();

    using (var writer = XmlWriter.Create(stream, settings))
    {
        serializer.Serialize(writer, validator.MatchPossiblyValid("STRING FOR PARSING"), emptyNS);
    }
    //Line below throws the exception
    stream.Write(Environment.NewLine);
    stream.Flush();             
}
样品

或者,更好的是,根本不要这样做,因为如上所述,具有多个根的“XML文档”是无效的。相反,在某个容器元素内序列化这两个对象