未找到默认构造函数,且不可序列化

本文关键字:序列化 构造函数 默认 | 更新日期: 2023-09-27 18:07:09

我已经尝试了很多次得到这个编译,我想做的是有一个数组的名称和扩展是可编辑的设计器,但当编辑通过设计器,它抛出错误:

没有找到类型为"Filter"的构造函数。

和on编译:

属性'ExtensionList'的代码生成失败。错误是:'类型'过滤器'在程序集'测试,版本=1.0.0.0,文化=中性,PublicKeyToken=null'未标记为可序列化'

有人能帮忙吗?这是我使用的代码:

    System.Collections.Generic.List<Filter> InternalExtensions = new System.Collections.Generic.List<Filter>();
    [System.ComponentModel.Description(@"Sets a list of acceptable extensions to view.")]
    public System.Collections.Generic.List<Filter> ExtensionList
    {
        get
        {
            return InternalExtensions;
        }
        set
        {
            InternalExtensions = value;
        }
    }
[Serializable()]
public class Filter : System.Runtime.Serialization.ISerializable
{
    String Name;
    String[] Extensions;
    public Filter()
    {
    }       
    public Filter(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
    {
        info.AddValue("FilterName", Name);
        info.AddValue("FilterExtensions", Extensions);
    }

   public void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
   {
       Name = (String)info.GetValue("FilterName", typeof(String));
       Extensions = (String[])info.GetValue("FilterExtensions", typeof(String[]));
   }
}

未找到默认构造函数,且不可序列化

我不确定这是否是所有你的问题,但你的ISerializable的实现是错误的方式。您应该在构造函数中填充对象,并在GetObjectData:

中填充SerializationInfo
public Filter(SerializationInfo info, StreamingContext context)
{
   Name = (String)info.GetValue("FilterName", typeof(String));
   Extensions = (String[])info.GetValue("FilterExtensions", typeof(String[]));
}

public void GetObjectData(SerializationInfo info, StreamingContext context)
{
    info.AddValue("FilterName", Name);
    info.AddValue("FilterExtensions", Extensions);
}

我没有预料到这会在编译时引起问题。涉及到什么样的代码生成?