【问题标题】:Constructor not found during deserialization?反序列化期间未找到构造函数?
【发布时间】:2010-10-14 23:29:32
【问题描述】:

举个例子:

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

在最后一行中,由于格式化程序找不到 Foo 的构造函数,引发了 SerializationException。这是为什么呢?

【问题讨论】:

    标签: c# .net serialization


    【解决方案1】:

    在 Foo 类中添加以下代码行

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

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

    【讨论】:

    • 注意 SerializationInfo 和 StreamingContext 类,它们位于 System.Runtime.Serialization 命名空间中。完整路径是 System.Runtime.Serialization.SerializationInfo
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 2023-04-02
    相关资源
    最近更新 更多