2

우리는 우리 제품 중 하나의 버전 2.0을 출시하기 위해 노력하고 있으며 버전 1.0 고객의 설치된 기본 버전과 파일 호환성을 유지하려고합니다. 나는 우리 애플리케이션의 대부분의 타입에 ISerializable을 구현해 왔으며, 걸림돌을 맞은 것 같다. 나는 형이사용자 정의 유형 및 직렬화 목록 문제

은, 토론을 위해 가족을 불러올 수

[Serializable] 
public class Family : 
    IDisposable, 
    INotifyPropertyChanged 
{ 
    private string m_Address; 
    //.... 
    private List<Name> m_People; 
    //... 
} 

이것은 우리가 효과적으로 동일한하는 사람에 이름 클래스를 변경 2.0, 1.0 버전으로 제공된 것입니다 하지만 생성자가 약간 다르며 분명히 다른 이름을 가지고 있습니다.

[Serializable] 
public class Family : 
    IDisposable, 
    INotifyPropertyChanged, 
    ISerializabe 
{ 
    private string m_Address; 
    //.... 
    private List<Person> m_People; 
    //... 

    private Family(SerializationInfo info, StreamingContext context) 
    { 
     m_Address = info.GetString("m_Address"); 
     m_People = (List<Person>)info.GetValue("m_People", typeof(List<Person>)); 
    } 

    // <<GetObjectData Method>> 
} 

이 분명히 작동하지 않습니다, 유형 "이름이 '어셈블리에 더 이상 없기 때문에 그 해결하는 SerializationBinder를 추가 :

public sealed NamePersonSerializationBinder : SerializationBinder 
{ 
    if (typeName.StartsWith("System.Collections.Generic.List`1[[Company.Name")) 
     return typeof(List<Person>); 
    else if (typeName.StartsWith("Company.Name")) 
     return typeof(Person); 
    else 
     return null; 
} 

나는 역 직렬화 할 때 주로 작품을 obeject, 바인더가 호출되면 올바른 유형을 반환하지만 Person의 Deserialization 생성자는 호출되지 않습니다. 예외는 발생하지 않고 누구나 아이디어가 있습니까?

답변

0

고정! 생성자를 완성하지 못하는 Person의 기본 유형이 있습니다.이 생성자는 사람 생성자가 호출되지 않도록합니다.

관련 문제