c# – .net XmlSerialize抛出“无法在使用ConformanceLevel.Frag
发布时间:2020-12-15 08:12:01 所属栏目:百科 来源:网络整理
导读:我试图序列化一个类,将 XML文件写成多个片段,即将该类的每个对象作为单个片段写入,而不使用XML头/根.以下是示例代码: [Serializable]public class Test{ public int X { get; set; } public String Y { get; set; } public String[] Z { get; set; } public
我试图序列化一个类,将
XML文件写成多个片段,即将该类的每个对象作为单个片段写入,而不使用XML头/根.以下是示例代码:
[Serializable] public class Test { public int X { get; set; } public String Y { get; set; } public String[] Z { get; set; } public Test() { } public Test(int x,String y,String[] z) { X = x; Y = y; Z = z; } } class Program { static void Main(string[] args) { Test t1 = new Test(1,"t1",new[] { "a","b" }); Test t2 = new Test(2,"t2",new[] { "c","d","e" }); XmlSerializer serializer = new XmlSerializer(typeof(Test)); //using (StreamWriter writer = new StreamWriter(@"f:testtest.xml")) { XmlWriter xmlWriter = XmlWriter.Create(@"f:testtest.xml",new XmlWriterSettings() {ConformanceLevel = ConformanceLevel.Fragment,OmitXmlDeclaration = true,Indent = true}); serializer.Serialize(xmlWriter,t1); serializer.Serialize(xmlWriter,t2); xmlWriter.Close(); } } } 在第一次序列化调用中,我得到了异常: WriteStartDocument cannot be called on writers created with ConformanceLevel.Fragment 我在这里想念的是什么? 解决方法
这个问题有一个解决方法.在使用序列化程序之前使用xml writer时,将不会写入标头.以下工作正常,但会在xml文件的第一行添加一个空注释标记
改进代码,如oleksa所建议的 static void Main(string[] args) { Test t1 = new Test(1,"e" }); XmlSerializer serializer = new XmlSerializer(typeof(Test)); //using (StreamWriter writer = new StreamWriter(@"f:testtest.xml")) { XmlWriter xmlWriter = XmlWriter.Create(@"test.xml",new XmlWriterSettings() { ConformanceLevel = ConformanceLevel.Fragment,OmitXmlDeclaration = false,Indent = true,NamespaceHandling = NamespaceHandling.OmitDuplicates }); xmlWriter.WriteWhitespace(""); serializer.Serialize(xmlWriter,t2); xmlWriter.Close(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |