4

나는 추상 Node 클래스를 상속받은 클래스로 구성된 트리 구조를 구축하는 프로그램을 작성 중이다. 내 프로그램에는 여러 가지 유형의 노드가 내장되어 있습니다. 그러나 고급 사용자가 내 라이브러리를 참조하고 자신의 파생어 인 Node을 작성할 수 있도록 허용하려고합니다. 이 플러그 - 인 라이브러리는 내 앱이 Assembly.Load()으로 시작될 때로드됩니다. 따라서 내 응용 프로그램에서 사용하는 모든 잠재적 인 Node 유형은 런타임까지 알 수 없습니다.공개 API에 사용할 XML serialization 메서드는 무엇입니까?

또한이 트리를 XML 파일과 직렬화 및 비 직렬화 할 수 있기를 원합니다. XMLSerializer, DataContractSerializer 및 IXmlSerializable 구현에 대한 경험이 있습니다. 일반적으로 DataContractSerializer는 IXmlSerializable을 구현하는 코드가 적기 때문에 필요하며 XmlSerializer가 사용할 수없는 개인 필드를 serialize 할 수 있습니다.

그러나이 프로젝트를 통해 나는 다른 사용자가 내 수업에서 파생 된 수업을 만들 것이라는 점도 고려해야하며 수업을 직렬화하는 데 필요한 코드 나 속성도 추가해야한다고 생각해야합니다.

여기에는 하나의 직렬화 메커니즘을 다른 직렬화 메커니즘과 함께 사용해야하는 이유가 있습니까?

답변

2

직렬화 및 직렬화가 애플리케이션 내에서만 발생하고 다른 누군가가 직렬화 된 데이터를 읽을 필요가없는 경우 직렬화 형식은 API에 영향을 미치지 않습니다. API가 염려된다면 불투명 한 파일로 직렬화하고 동일한 파일에서 역 직렬화합니다.

필요한 경우 이진 형식으로 serialize 할 수 있으므로이 경우 DataContractSerializer를 사용하십시오.

+0

예 내 프로그램이 아닌 다른 프로그램이이 파일을 serialize/deserialize해야하는 이유가 표시되지 않으며 앞으로는 다른 serialization 형식 (예 : 바이너리)을 허용한다는 생각을 좋아합니다. –

+0

분명히하기 위해 "binary"는 XmlDictionaryWriter 클래스가 낼 수있는 이진 직렬화 된 XML을 의미합니다. 우리 모두는 텍스트 직렬화 된 XML에 익숙하지만 직렬화 형식 일뿐입니다. –

+0

* @ John Saunders * XML을 정의하는 것만으로도 직렬화 형식이 너무 저감합니다 ... – Luca

관련 문제