[未找到反序列化“XXX”类型对象的构造函数。]的解决办法

出现[未找到反序列化“XXX”类型对象的构造函数。]错误一般是由于要反序列化的类或者它的父类(如:继承了Dictionary类)实现了ISerializable接口而该类没有定义序列化构造函数,这时候只要把序列化构造函数加上去就可以反序列化了。需要注意的是,一个类或者它的父类实现ISerializable接口就表示启用了自定义序列化,需要按照自定义序列化的规则编写序列化构造函数和GetObjectData函数,像下面的两个例子。

    [Serializable]
    class Test : ISerializable //实现了ISerializable接口
    {
        public Test()
        {
        }

        //实现了ISerializable接口的类必须包含有序列化构造函数,否则会出错。
        protected Test(SerializationInfo info, StreamingContext context)
        {
            Value = info.GetBoolean("Test_Value");
        }

        #region ISerializable 成员

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            base.GetObjectData(info, context);
            info.AddValue("Test_Value", Value);
        }

        #endregion

        public bool Value { get; set; }
    }
    [Serializable]
    class Test : Dictionary //父类实现了ISerializable接口(Dictionary实现了ISerializable接口)
    {
        public Test()
        {
        }

        //父类实现了ISerializable接口的,子类也必须有序列化构造函数,否则反序列化时会出错。
        protected Test(SerializationInfo info, StreamingContext context)
            : base(info, context)
        {
            Value = info.GetBoolean("Test_Value");
        }

        public override void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            base.GetObjectData(info, context);
            info.AddValue("Test_Value", Value);
        }

        public bool Value { get; set; }
    }

评论

《“[未找到反序列化“XXX”类型对象的构造函数。]的解决办法”》 有 1 条评论

  1. exam 的头像

    继续发扬多谢.

回复 exam 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注