Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Constructor not found during deserialization?

Tags:

Given the following example:

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 the last line, a SerializationException is thrown because the formatter can't find the constructor to Foo. Why is that?

like image 568
Dave Van den Eynde Avatar asked Mar 23 '09 13:03

Dave Van den Eynde


1 Answers

Append the following code lines in the class Foo

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

The class needs an constructor with the relevant serialisation parameters.

like image 155
Michael Piendl Avatar answered Sep 25 '22 12:09

Michael Piendl