C#学习教程:连续的XML序列化原因——TokenStartElementinstateEndRootElement会导致无效的XML文档对象,由validator.MatchPossiblyValid(stringinput)方法生成。首先调用,序列化并写入文件。但是,第二次调用失败并出现异常:System.InvalidOperationException:'TokenStartElementinstateEndRootElementwouldresultinaninvalidXMLdocument.如果要编写XML片段,请确保将ConformanceLevel设置设置为ConformanceLevel.Fragment或ConformanceLevel.Auto。'System.InvalidOperationException:'处于EndRootElement状态的标记StartElement将导致无效的XML文档。如果要编写XML片段,请确保将ConformanceLevel设置设置为ConformanceLevel.Fragment或ConformanceLevel.Auto。'XmlSerializerNamespacesemptyNS=newXmlSerializerNamespaces(new[]{XmlQualifiedName.Empty});varserializer=newXmlSerializer(typeof(PDPCustomerInfoInvalid));varsettings=newXmlWriterSettings();settings.OmitXmlDeclaration=true;//settings.Indent=true;使用(varstream=newSystem.IO.StreamWriter(args[1],true)){使用(varwriter=XmlWriter.Create(stream,settings)){serializer.Serialize(writer,validator.MatchPossiblyValid("STRINGFORPARSING"),emptyNS);stream.Write(Environment.NewLine);stream.Flush();//下面的行抛出异常serializer.Serialize(writer,validator.MatchPossiblyValid("STRINGFORPARSING"),emptyNS);stream.Write(Environment.NewLine);stream.Flush();您正在尝试使用单个XmlWriter创建具有多个根元素的XML文件,但是,每个XML文档的XML标准只需要一个根元素。您的XmlWriter抛出异常以指示正在创建的XML无效。(这里是MCVE。)如果确实需要将两个XML文档合并到一个文件中,则可以使用将XmlWriterSettings.CloseOutput设置为false创建的单独XmlWriters:using(varstream=newSystem.IO.StreamWriter(args[1],true)){var设置=新的XmlWriterSettings();settings.OmitXmlDeclaration=true;//settings.Indent=true;settings.CloseOutput=false;使用(varwriter=XmlWriter.Create(stream,settings)){serializer.Serialize(writer,validator.MatchPossiblyValid("STRINGFORPARSING"),emptyNS);}stream.Write(Environment.NewLine);stream.Flush();使用(varwriter=XmlWriter.Create(stream,settings)){serializer.Serialize(writer,validator.MatchPossiblyValid("STRINGFORPARSING"),emptyNS);}//下面的行抛出异常stream.Write(Environment.NewLine);stream.Flush();样本小提琴。或者,更好的是,根本不这样做,因为如上所述,具有多个根的“XML文档”是无效的。相反,序列化某些容器元素内的两个对象。以上就是C#学习教程:连续XML序列化的原因——状态为EndRootElement的TokenStartElement会导致无效的XML文档。如果对大家有用,需要进一步了解C#学习教程,还望大家多加关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
