C# 连续XML序列化原因-状态EndRootElement中的令牌StartElement将导致无效的XML文档
我正在写入对象的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
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文档”是无效的。相反,在某个容器元素内序列化这两个对象