2011-08-22 3 views
1

사용자 설정을 저장하기 위해 내 클래스 개체를 저장하기 위해 DataContractSerializer를 사용하고 있습니다. UserSettings 클래스는 다른 데이터 형식의 다른 개체를 사용합니다. DataContractSerializer의 KnownTypes 매개 변수에 모든 유형을 추가합니다. 하지만 앞으로의 호환성 문제가 있습니다. 새로운 데이터 유형을 사용하여 UserSerrings 클래스에 새 속성을 도입하면 내 프로그램의 새 버전에서도 작동합니다. 그러나 이전 버전에서는 데이터 형식이 KnownTypes 배열에 없기 때문에 XML 파일을 deserialize 할 수 없다는 예외를 throw합니다. 어쨌든 이전 버전에서는 사용되지 않았기 때문에 이러한 유형을 무시하기 만하면됩니다. 어떻게하면 알 수없는 속성/유형을 무시하고 XML 파일을 읽고 쓸 수 있습니까?DataContractSerializer 정방향 호환성 문제

+0

DCS 문제에 대한 해결책을 모르지만 해결책이있을 수 있습니다. 당신이 xml에 묶여 있지 않다면 ... –

+0

나는 xml을 요구하지 않는다. 너는 무엇을 제안 하겠는가? – Steve

+0

나는 대체 serializer 인 protobuf-net을 유지 관리합니다. 예기치 않은 하위 유형은 조용히 무시할 수 있지만 예상 한 계층 구조 유형의 값은 그대로 유지됩니다. –

답변

2

정확히 IExtensibleDataObject (확장 데이터)가 설계된 시나리오입니다! 데이터 계약의 v1이 확장 데이터 인터페이스로 장식 된 경우 미래의 알 수없는 유형을 포함하여 향후 계약에서 데이터를 무시하고 저장하고 왕복 할 수 있습니다.

Forward-compatible data contracts

Data contract versioning

IExtensibleDataObject sample

And even more guidance on data contract versioning...

:

나는이 기능에 대한 자세한 내용과 특정 상황을 구현하는 방법을 알아 보려면 다음 리소스를 권 해드립니다

+0

Love it. 감사! –