2013-06-25 21 views
3

XML 문서에 저장할 객체 목록이 있습니다. 데이터를 저장하고 검색하기 위해 serialize/deserializing을 사용하고 있습니다. 새 Object를 저장할 때 List에 전체 XML을 deserialize하고이 목록에 새 객체를 추가하고 XML에 다시 저장하기 위해 다시 직렬화합니다.XML에 새 객체 추가

내 질문은 올바른 방법으로 새 ​​개체를 추가하거나 새 개체를 추가하는 다른 방법이 있습니까? 데이터를 deserialize하는 동안 오류가 발생할 수 있으므로 태그를 수동으로 만들고 추가하지 않을 것입니다.

이것은 내가 지금 사용하고 무엇을 :

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

는 기본적으로, 그래, 직렬화가 갈 수있는 올바른 방법이다. 그것은 견고하고 합리적이며 유연하며 "수동으로"객체를 작성하는 것보다 작업이 적고 유지 보수가 쉽습니다.

그러나 직렬화하는 개체 그래프가 크고 프로세스를보다 효율적으로 만들고 싶다면 새 개체 만 serialize하고 추가하거나 삽입 할 수 있는지 고려해야 할 수 있습니다 기존 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

위의 예에서 수정 됨 –