2010-06-29 3 views
1

데이터베이스에서 만드는 데이터 테이블에 저장하는 대신 XElement 개체에 저장 메커니즘이 필요한 플랫폼 공급 업체 때문에 프로젝트를 다시 작성해야합니다. 고통스럽고 통찰력이 필요합니다.XML 스키마를 프로그래밍 방식으로 업그레이드

나는 XmlSerializer를 사용하여 Xml과 내 개체 그래프를 변환 할 수 있으며 주어진 XElement 개체를 읽고 쓸 수는 있지만 변경할 필요가있을 때 Xml 데이터를 업그레이드하는 방법을 모르겠습니다. 객체 그래프

누구나이 문제에 직면 한 적이 있습니까? 그리고 어떤 기사가 그러한 업데이트 방법론을 작성하는 방법을 배우는 것이 가장 효과적인지 입증 한 사람이 있습니까? 감사.

+0

재 직렬화하지 않고 클래스 정의를 변경할 때 XML 데이터를 업데이트 하시겠습니까? 까다로운 소리 ... – Mau

+0

예. 그것이 내가하고 싶은 일입니다. 나는이 방법을 다루는 것 외에 선택의 여지가 없으므로 이것을 알아 내려고 노력 중이다. serialization/deserialization 메서드를 오버로드하는 방법이 있으며이 문제를 해결하기 위해 과거에 누군가가이 작업을 수행했다고 생각했습니다. –

+0

아이디어는 정의를 변경해야 할 때입니다. 이전 XML 형식을 메모리로 읽어 들이고, 필요한 모프를 만든 다음 새 XML 형식으로 serialize하는 스크립트를 실행할 수 있습니다. –

답변

1

나는이 초조한 상황에 처해있었습니다. XmlSerializer를 사용하여이 작업을 수행 할 수 없다고 생각합니다. XmlSerializer는 현재 형식 계층 구조를 기반으로 사용자 지정되는 serialization 루틴을 컴파일합니다. 너무 많이 변경하면 XML이 새로운 클래스 구조와 호환되지 않게됩니다.

XML 스키마가 생성되지 않는다고 생각합니다. '스키마'는 컴파일 된 애드혹 XML 직렬화 코드입니다.

당신 는 3) 과거와 객체 사이의 모프를 적용, 당신은 기존의 클래스로 XML을 deserialising 변경 사항을 반영 새로운 클래스, 2)을 생성 1)에 의해 원하는 것을 할 수 4)),

를 새로운 객체, 5) 6), 기존의 것들에 클래스의 이름을 변경 XML에 임시 이름을 교체를 serialising하지만 일회성으로 확인 될 수 있지만 그것은 (매우 고통스러운 . 당신이 자주 변화에 대응해야하는 경우 (현재 F 번호 같은 직렬화 쌀쌀 컴파일러를 사용하는 경우 나)

, 여기에 최고의 아이디어는 코드에 대응할 수 자신의 XmlSerializer를 (아마도 Linq2XML 사용) 작성하는 것입니다 변경.

+0

흠 .. Linq2Xml을 사용하고 자신의 XmlSerializer를 작성한다는 아이디어에 대해 자세히 설명 할 수 있습니까? 생각하고있는 경로와 같지만 Linq2Xml 전체에 대해 확실하지 않았습니다. 마스터 오브젝트가 "버전"속성을 보유 할 수 있다고 생각 했었습니다. 어쩌면 업그레이드 스크립트의 일부로 사용할 수 있습니다. –

관련 문제