Подтвердить что ты не робот

Конструктор не найден во время десериализации?

В следующем примере:

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

В последней строке генерируется исключение SerializationException, потому что форматирование не может найти конструктор в Foo. Почему это?

4b9b3361

Ответ 1

Добавьте следующие строки кода в класс Foo

public Foo() {

}

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

}

Класс нуждается в конструкторе с соответствующими параметрами сериализации.