微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – .net XmlSerialize抛出“无法在使用ConformanceLevel.Fragment创建的编写器上调用WriteStartDocument”

我试图序列化一个类,将 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:\test\test.xml"))
        {
            XmlWriter xmlWriter = XmlWriter.Create(@"f:\test\test.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:\test\test.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();
        }
    }

原文地址:https://www.jb51.cc/csharp/101083.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐