2014-10-05 2 views
2

이전 버전을 사용하여 직렬화 된 파일을 비 직렬화하려고합니다. 새 버전에서 .net 바이너리 포맷터는 정의가 많이 변경된 객체를 비 직렬화합니다.

, 우리는 새로운 간 부모 클래스를 추가 공개
  • 에 다음과 같은 일 사설에서

    1. 변화 네임 스페이스
    2. 변경 클래스 멤버 액세스 수준을 했어요. Class A는 Base에서 파생되었습니다. 이제 Class A는 B에서 파생되고 B는 Base에서 파생됩니다. B에는 새로운 멤버가 없습니다.
    3. 기본 클래스는 새 멤버를 추가합니다.

    나는 SerializationBinder를 사용하여 문제 1을 해결할 수 있음을 알고 있습니다. 새로 추가 된 클래스 멤버의 경우 [비 직렬화]로 표시했습니다. 하지만 여전히 deserialization 오류가 발생합니다.

    모든 포인터?

  • 답변

    1

    나는 그 말을 싫어하지만, 여기 내 첫 번째 포인터는 "그렇게하지 않는다"가 될 것입니다 - BinaryFormatter 매우 취성 - 당신 동안 종종 6시간 각 과거 취득하는 키보드에 머리를 쾅 수 있습니다 연속 고통 포인트, 정말 가치가 없습니다. 나는 항상 "BinaryFormatter을 사용하지 말라"고 말하는 많은 이유가 있습니다 - 슬프게도 그 중 4 개를 발견했습니다.

    • 원래 클래스를 다시 넣어
    • 시작은 별도의 DTO 모델과 개체 모델이 모델로 이동 이전 데이터를 역 직렬화하는 단지 DTO로 사용 - : 솔직히, 내 추천 것 직렬화가 응용 프로그램 논리와 완전히 독립적 이도록 매핑하십시오.
    • 다른 serializer를 조사하십시오. 단지에 대한 어떤 대안 시리얼 라이저는 BinaryFormatter 것이 바람직 할 것이다 (가서 모두 같은 실수를 반복 아마도 NetDataContractSerializer 제외하고, DataContractSerializer는하지만, 확인 틱입니다)

    죄송이 아닌 긍정적입니다 ...

    +0

    http://msdn.microsoft.com/en-us/magazine/cc188950.aspx를주의 깊게 읽은 후에이 일을 너무 많이하기위한 노력을 알고 있습니다. 이전 클래스를 다시 가져오고 전체 serializer를 다른 클래스로 마이그레이션하여 바이너리 포맷터를 제거하기로 결정했습니다. – ianXian