2013-06-25 143 views
3

我有XML文档中存储的对象列表。我正在使用序列化/反序列化来存储和检索数据。当我不得不存储新对象时,我将整个xml反序列化为一个List,并将新对象添加到这个List并再次序列化以将其存储回xml。向Xml添加新对象

我的问题是,这是正确的方式来添加新的对象,或有任何其他方式来添加新的对象,我不想手动创建标签和添加,因为它们可能会导致错误,同时反序列化数据。

这是我使用的是现在什么:

public static T readXml<T>(string fileName) 
    { 
     T tempList ; 
     XmlSerializer deserializer = new XmlSerializer(typeof(T)); 
     TextReader textReader = new StreamReader(fileName); 
     tempList = (T)deserializer.Deserialize(textReader); 
     textReader.Close(); 

     return tempList; 
    } 

    public static void writeXml<T>(T tempList,string fileName) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(T)); 
     TextWriter textWriter = new StreamWriter(fileName); 
     serializer.Serialize(textWriter, tempList); 
     textWriter.Close(); 
    } 

回答

1

本质上说,是的,序列化是正确的道路要走。它非常健壮,相当灵活,而且比“手动”编写对象要少得多(而且更容易维护)。但是,如果您正在序列化的对象图很大,并且您希望使您的过程更高效,则可能需要考虑是否可以仅序列化新对象,然后追加或插入它到现有的Xml中。

要插入或追加新节点,需要将现有的xml加载到XmlDocument对象中,找到要添加新内容的节点并追加新节点。例如:

XmlDocument xmldoc = new XmlDocument(); 
xmldoc.Load("MyXml.xml"); 
XmlDocument newDoc = new XmlDocument(); 
newDoc.Load("MyNewObject.xml"); 

//Use Xpath to specify node 
XmlNode insertNode = xmldoc.SelectSingleNode("parentElement/myElement"); 
XmlNode newObj = newDoc.SelectSingleNode("rootElement"); 

insertNode.AppendChild(newObj); 

xmldoc.Save("MyXml.xml"); 

从文件中检索XML是唯一的例子的目的:在现实世界中,你可能已经以某种形式流或XML阅读器,或者您可能需要从检索一个数据库。

+0

是的,这就是我想了解的,我如何追加单个对象? –

+0

用上面的例子编辑 –