2009-04-10 4 views
2

.NET 1.1에서 개발 된 상속 된 코드베이스가 있습니다. 2.0으로 마이그레이션 할 때 어셈블리의 이름을 변경했습니다. 이제 이전 어셈블리와 .NET 1.1에서 직렬화 된 객체를 포함하는 이전 파일을 읽어야 할 필요가 있음을 알게되었습니다. 일부 필드는 성공적으로 deserialized되지만 무시됩니다. 내가 FormatterAssemblyStyle.Full을 사용하는 경우, 나는이 같은 오류를 얻을 : 'MyNamespace.T_VERSION'클래스다소 호환되지 않는 BinaryFormatter 데이터를 deserialize하는 방법은 무엇입니까?

회원 'T_VERSION+s_sys_ver'직렬화 스트림에 존재하지 않는 및 System.Runtime.Serialization.OptionalFieldAttribute 표시되지 않습니다.

이진 파일을 조사한 결과 에 이 나타나고 필드 형식은 변경되지 않았 음을 보여줍니다.

수동으로 이전 형식을 리버스 엔지니어링하고 직접 수동 직렬화 루틴을 작성하는 것보다 이전 형식 파일을 deserialize 할 수있는 방법이 있습니까?

답변

5

체크 SerializationBinder

직렬화 동안 포맷터 는 에 필요한 정보 정확한 타입과 버전의 오브젝트의 인스턴스를 작성 송신한다. 이 정보는 일반적으로 전체 형식 이름과 어셈블리 이름이 개체를 포함합니다. 어셈블리 이름은 이름, 버전 및 강력한 이름 (Strong-Named Assemblies 참조) 해시 어셈블리를 포함합니다. 기본적으로 역 직렬화는이 정보를 사용하여 개체의 인스턴스를 만듭니다 ( 어셈블리로드는 보안 정책으로 제한됨). 클래스가 어셈블리 또는 클래스가 서버 및 클라이언트에 필요한 의 다른 버전 사이에서 이동하기 때문에 일부 사용자는 클래스는로드 제어, 중 해야합니다.

관련 문제