2010-01-18 2 views
3

XML을 serialize/deserialize하기 위해 C# 개체를 사용하고 있습니다.C# XML xml 태그 뒤에 XML에 주석을 삽입하십시오.

내가 직렬화하는 동안 XML 파일에 주석을 추가 할

는,이 댓글이 댓글이 필요하지 않습니다 <?xml version="1.0" encoding="UTF-8"?>

가 직렬화되는 표준 XML 태그 후 기본 <!-- comment -->에게있을 것입니다, 그 기본 주석을 나타냅니다 xml 파일을 만든 제품 및 버전

+0

귀하의 질문은 무엇입니까? 이 주석을 직렬화 된 XML에 어떻게 추가합니까? – Natrium

+0

개체를 XML로 serialize하는 중입니다. 주석은 개체의 표현 외부에 있으며 xml의 주석입니다. –

+0

XMLtag를 XMLtag + Comment로 대체 할 수는 있지만 가장 좋은 해결책은 아닙니다. –

답변

2

XML에 직렬화하고 XDocument (또는 원하는 API)으로 XML을로드하고 주석을 삽입하고 다시 저장하십시오. 간단하고 사용하고자하는 API로 작동해야합니다. 임시 저장소로 MemoryStream을 사용하여 메모리에서 전체 작업을 수행 할 수 있습니다.

새로운 XDocument/XmlDocument에 직접 직렬화의 방법이 될 수 있습니다,하지만 난 그것을 잘 모르는 것 같아요.

+0

@Downvoter : 투표에 대한 이유를주는주의? –

10

당신은 CreateWriter을 사용하여 새 XDocument에 직접 직렬화 할 수 있습니다

XDocument document = new XDocument(); 
document.Add(new XComment("Product XY Version 1.0.0.0")); 
using (XmlWriter writer = document.CreateWriter()) 
{ 
    serializer.WriteObject(writer, graph); 
} 
document.Save(Console.Out); 

또는, 당신은뿐만 아니라 다른 XmlWriter로 직렬화 할 수 있습니다

using (XmlWriter writer = XmlWriter.Create(Console.Out)) 
{ 
    writer.WriteStartDocument(); 
    writer.WriteComment("Product XY Version 1.0.0.0"); 
    serializer.WriteObject(writer, graph); 
    writer.WriteEndDocument(); 
} 
+2

+1000000은 Jon Skeet이하지 않은 것을 알고있었습니다 : P (그리고 그것은 좋은 대답입니다) –

0

을 당신이 IXMLSeriablizable 당신의 객체에 구현할 수 있다고 생각 . 올바르게 기억하면 직렬화/역 직렬화 (CreateSchema 또는 세 번째 방법이 무엇이든간에 구현할 필요가 없을 때)에서 해당 인터페이스의 ReadXML (XmlReader 판독기) 및 WriteXML (XmlWriter 작성기)가 자동으로 호출됩니다.

구현시주의해야 할 점은 관련된 모든 중첩 된 객체에 구현해야한다는 것입니다. (즉, 사용자 개체가 포함 된 부서 개체가 있고 부서에 주석을 추가하려는 경우 부서 및 사용자 모두에서 IXmlSeriablizable을 구현해야합니다.) 또한 직렬화를 직접 관리하므로 클래스에 새 속성을 추가하면 수동으로 IXmlSerializable 메서드를 수정해야합니다.

저는 일반적으로 객체에 IXmlSerializable을 구현합니다. 직렬화되는 방식과 방법을 직접 제어하는 ​​것이 좋습니다.