2013-01-23 1 views
3

C#에서 xml serialization/deserializtion을 사용하여 이미 작성된 xml 파일을 업데이트 할 수 있는지 궁금한가요? 또한 파일에 초기에 루트 노드 만있는 경우이를 자식 노드로 업데이트 할 수 있습니까? (방법에 관계없이)xmlserializer를 사용하여 기존 xml 파일을 업데이트 할 수 있습니까?

+0

직렬화 후에 XmlDocument 또는 XDocument가있는 경우 원하는대로 처리 할 수 ​​있습니다. 이것에 대한 무작위 변경으로 인해 나중에 비 직렬화에 문제가 발생할 수 있습니다. – ryadavilli

+0

본 - http://www.codeproject.com/Articles/22787/Custom-Serialization-Example? – WorldIsRound

+0

유망 해 보인다. 질문이 하나 더 있는데, 이것이 주관적이라고 알고 있지만, xmlserialzation이나 xml-linq는 [here] (http://www.i-think22.net/archives/2009/02/27/writing-xml)와 같은 것이 더 좋습니다. -with-xelement /)? –

답변

0

직렬화 된 데이터를 변경하면 직렬화 개념에 위배됩니다. 따라서 XmlSerializer은이를 지원하지 않습니다.

ryadavilli가 XmlDocument 또는 XDocument를 사용하여 수동으로 노드를 추가/수정/제거 할 수 있다고 제안했습니다. 이 기능은 이전 버전의 개체 데이터를 serialize하고 해당 문서를 새 버전으로 업데이트하려는 경우 매우 유용합니다.

그러나 현재 개체 모델이 직렬화 된 데이터와 다르지 않다면 직렬화를 고려하고 메모에서 개체를 변경 한 다음 다시 직렬화하는 방법을 고려 했습니까?

다른 유일한 옵션은 IXmlSerializable을 구현하고 XmlReaderXmlWriter을 모두 열고 "삽입 지점"에 도달 할 때까지 각 노드를 복사하는 것입니다. 그런 다음 XmlSerializer을 사용하여 변경된 데이터를 쓰고 그 후에 복사를 계속하십시오. 확실히 out-of-the-box 솔루션이 아닙니다.

귀하의 의견에 질문 - XmlSerialization는 XDocument (xml-linq) 수동으로 xml 문서를 작성할 수있는 개체를 serialize하고 deserialize하기위한 것입니다. 결과가 같을지라도, 본질적으로 다른 일을하기 때문에 달성하고자하는 것에 따라 어느 것이 더 낫습니다.