2009-03-23 10 views
21

Teniendo en cuenta el siguiente ejemplo:¿Constructor no encontrado durante la deserialización?

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); 
     } 
    } 
} 

En la última línea, un SerializationException se produce porque el formateador no puede encontrar el constructor de Foo. ¿Porqué es eso?

Respuesta

49

anexar los siguientes líneas de código en la clase Foo

public Foo() { 

} 

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

} 

La clase necesita una constructora con los parámetros de serialización pertinentes.

+5

Y todo porque el diccionario implementa ISerializable, por supuesto ... –

+0

Nota para las clases SerializationInfo y StreamingContext, están en el espacio de nombres ** System.Runtime.Serialization **. La ruta completa es ** System.Runtime.Serialization.SerializationInfo **. – Wappenull

Cuestiones relacionadas