反序列化期间找不到构造函数?

24

给定以下示例:

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的构造函数。这是为什么呢?
1个回答

53

在类Foo中添加以下代码行

public Foo() {

}

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

}

这个类需要一个具有相关序列化参数的构造函数。


1
请注意SerializationInfo和StreamingContext类,它们位于System.Runtime.Serialization命名空间中。完整路径为System.Runtime.Serialization.SerializationInfo - Wappenull
为什么需要额外的构造函数?序列化和反序列化在POC类和默认构造函数中都可以正常工作。为什么编译器对这个类有问题? - Suncat2000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接