2009-02-08 5 views
2

DataContractSerializer을 사용하여 직렬화 및 비 직렬화 글꼴 목록으로 작업하고 있습니다. 두 단계 사이에서 사용자가 자신의 컴퓨터에서 글꼴을 제거했다고 생각할 수 있습니다. 글꼴 이름이 시스템에 여전히 존재하는지 확인하기 위해 deserialize 될 때 글꼴 이름을 확인하고 싶습니다. 존재하지 않으면 해당 요소는 DataContractSerializer.ReadObject()에 의해 반환 된 컬렉션에 포함되지 않습니다.직렬화 해제 유효성 검사

특히 FontFamily을 저장하고 FontFamily.Name을 얻는 속성을 직렬화합니다. 이 속성의 접근 자에서 문자열을 FontFamily으로 다시 변환합니다.

내가 생각할 수있는 유효성 검사에 대한 유일한 대안은 속성의 설정된 접근자가 잘못된 값을 무시하고 나중에 비 직렬화 된 개체를 필터링하여 필터링하는 것입니다. 나는이 옵션을 좋아하지 않는다. 그러나 더 적절한 방법이 있는가?

답변

3

왜 OnDeserializedAttribute를 사용하지 않습니까? 콜백이 클라이언트 환경에 유효하지 않은 항목의 유효성 검사 및 제거를 수행하도록하십시오.

http://msdn.microsoft.com/en-us/library/ms733734.aspx

난 당신이 내부적으로 데이터를 제거하거나 수정하면 사용자가 데이터를 트립에 대한 라운드 갈 것입니다 방법에 대한 몇 가지 우려를해야합니까.

(예 : 두 대의 다른 컴퓨터에있는 문서를 작업 할 때 MS Publisher의 이전 버전이 특히 두려운 점을 기억합니다. 한 컴퓨터에서 파일을 수정할 때마다 Publisher는 다시 포맷됩니다. 해당 컴퓨터에 연결된 프린터를 대상으로하는 문서. 실제 인쇄를 수행 할 다른 컴퓨터로 돌아 갔을 때 게시자가 다시 포맷을 시도하지만 여백이 맞지 않아 좀 더 조정해야했습니다. .)

+0

괜찮을 것 같습니다. 나는 아직도 잘못된 항목이 생성되었다는 생각을 좋아하지 않지만,이 경우에는 내가 함께 살 수 있다고 생각한다. Re : 데이터 이식성, 현재, 직렬화 된 파일을 여러 대의 컴퓨터에서 사용할 수있게하는 것에 대해서는 걱정하지 않을 것입니다. 나중에. –

0

ReadXml의 구현이 포함 된 IXmlSerializable 클래스를 구현할 수도 있습니다.이 경우 객체가 직렬화 될 때 원하는 모든 유효성 검사를 수행 할 수 있습니다.

+0

유효한 동안, 그것은 많은 추가 작업입니다. 콜백을 수행하지 않는 XmlSerializer가 유일한 방법이지만 DataContractSerializer의 경우 콜백 라우트가 훨씬 좋습니다. –

관련 문제