将对象序列化为XML并将其附加到XML文件中

本文关键字:XML 文件 对象 序列化 | 更新日期: 2023-09-27 18:18:56

我正在尝试将(马)对象转换为XmlElement,以便将其附加到XML文件中。这是我最近尝试的方法。

        // create writer and serializer to add horse to xml
        var stringwriter = new StringWriter();
        var serializer = new XmlSerializer(horse.GetType());
        // serialize horse object to xml 
        serializer.Serialize(stringwriter, horse);
        var xmlStr = stringwriter.ToString();
        // format string to xml 
        var horseXml = new XmlDocument();
        horseXml.LoadXml(xmlStr);
        // get horse element from horseXml
        var horseEl = horseXml.ChildNodes[0];
        // assign xmldb to xml document
        var xmlDb = new XmlDocument();
        xmlDb.Load(xmlDbFilepath);
        XmlNode root = xmlDb.DocumentElement;
       // add horseEl to root of xmlDb
        root.AppendChild(horseEl);
        xmlDb.Save(xmlDbFilepath);

不幸的是,当我到达root.AppendChild(horseEl)这一行时,它抛出了以下异常:"一个类型为'System '的异常。在System.Xml.dll中发生了ArgumentException,但没有在用户代码中处理。附加信息:要插入的节点来自不同的文档上下文。

任何建议将不胜感激!

编辑:这里有一个链接显示我的马类和xmldb。

将对象序列化为XML并将其附加到XML文件中

试试这个。如果数据和类结构正确,应该可以工作。

// same code till this
// get horse element from horseXml
XmlElement horseEl = horseXml.DocumentElement; //[1] get the doc element
// assign xmldb to xml document
var xmlDb = new XmlDocument();
xmlDb.Load(xmlDbFilepath);
//XmlNode root = xmlDb.DocumentElement; [2] removed
// add horseEl to root of xmlDb
//var newRoot = root.AppendChild(clonedHorseEl); [3] removed
var xe = xmlDb.CreateElement("Horse"); //[4] Create new Horse element on xmlDb
xe.InnerXml = horseEl.InnerXml; //[5] copy horseEl content
xmlDb.DocumentElement.AppendChild(xe);
xmlDb.Save(xmlDbFilepath);