2009-03-23 15 views
21

das folgende Beispiel Gegeben:Konstruktor nicht während der Deserialisierung gefunden?

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

In der letzten Zeile ein SerializationException geworfen wird, weil die Formatierer nicht den Konstruktor zu Foo finden. Warum das?

Antwort

49

Append die folgenden Codezeilen in der Klasse Foo

public Foo() { 

} 

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

} 

Die Klasse einen Konstruktor mit den relevanten Parametern der Serialisierung muss.

+5

Und alles, weil Dictionary implementiert ISerializable, natürlich ... –

+0

Hinweis für SerializationInfo und StreamingContext Klassen, Sie sind in ** System.Runtime.Serialization ** Namespace. Vollständiger Pfad ist ** System.Runtime.Serialization.SerializationInfo **. – Wappenull

Verwandte Themen