2009-03-23 5 views
21

다음 예제를보십시오.deserialization 중에 생성자를 찾을 수 없습니까?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.Serialization.Formatters.Binary; 
using System.IO; 

namespace SerializationTest 
{ 
    [Serializable] 
    class Foo : Dictionary<int, string> 
    { 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      Foo foo = new Foo(); 
      foo[1] = "Left"; 
      foo[2] = "Right"; 

      BinaryFormatter formatter = new BinaryFormatter(); 
      MemoryStream stream = new MemoryStream(); 

      formatter.Serialize(stream, foo); 
      stream.Seek(0, SeekOrigin.Begin); 
      formatter.Deserialize(stream); 
     } 
    } 
} 

마지막 행에서는 형식화 프로그램이 Foo에 대한 생성자를 찾을 수 없기 때문에 SerializationException이 발생합니다. 왜 그런가요?

답변

49

는 클래스 푸

public Foo() { 

} 

public Foo(SerializationInfo info, StreamingContext context) : base(info, context) { 

} 

클래스는 관련 직렬화 매개 변수가있는 생성자를 필요에 다음 코드 줄을 추가합니다.

+5

Dictionary는 모두 ISerializable을 구현하기 때문에 ... –

+0

SerializationInfo 및 StreamingContext 클래스에 대한 참고 사항, 은 ** System.Runtime.Serialization ** 네임 스페이스에 있습니다. 전체 경로는 ** System.Runtime.Serialization.SerializationInfo **입니다. – Wappenull

관련 문제