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

C# 未找到默认构造函数,且不可序列化,c#,arrays,compilation,designer,C#,Arrays,Compilation,Designer,我已经尝试过很多次来编译它,我想做的是通过designer编辑一组名称和扩展名,但是当通过designer编辑时,它会抛出错误: 找不到类型“Filter”的构造函数 在编译时: 为属性“ExtensionList”生成代码失败。错误是:“程序集测试中的类型“筛选器”,版本=1.0.0.0,区域性=中性,PublicKeyToken=null未标记为可序列化。” 有人能帮忙吗?这是我正在使用的代码: System.Collections.Generic.List<Filter>

我已经尝试过很多次来编译它,我想做的是通过designer编辑一组名称和扩展名,但是当通过designer编辑时,它会抛出错误:

找不到类型“Filter”的构造函数

在编译时:

为属性“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[]));
   }
}
System.Collections.Generic.List InternalExtensions=new System.Collections.Generic.List();
[System.ComponentModel.Description(@“设置要查看的可接受扩展的列表”。)]
public System.Collections.Generic.List扩展列表
{
得到
{
返回内部扩展;
}
设置
{
内部扩展=价值;
}
}
[可序列化()]
公共类筛选器:System.Runtime.Serialization.ISerializable
{
字符串名;
字符串[]扩展名;
公共过滤器()
{
}       
公共筛选器(System.Runtime.Serialization.SerializationInfo信息,System.Runtime.Serialization.StreamingContext上下文)
{
信息添加值(“过滤器名称”,名称);
info.AddValue(“FilterExtensions”,扩展名);
}
public void GetObjectData(System.Runtime.Serialization.SerializationInfo信息,System.Runtime.Serialization.StreamingContext上下文)
{
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);
}

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

是的,我把它放回了构造函数中。问题没有改变。它并没有停止它的运行,它只是显示这个错误消息6次,然后它就编译了。@Fabian:你的意思是说,如果你再次编译它,它就会开始编译吗?这是警告还是实际错误?它显示为一个消息框,播放错误声音,但应用程序仍在编译。messagebox在编译时出现6到7次。编辑:在保存项目时也会这样做。我猜这是来自设计器,虽然在设计器中打开属性窗口时没有显示此错误,但当我按下“添加”按钮时,它只会抱怨没有构造函数。哇,现在我保存并重新打开了Visual Studio,它没有抱怨任何事,但resX文件出错了,我手动删除了ExtensionList的键,并且“添加”按钮起作用,但窗口不具有值名称和扩展名,只接受对象类型。@Fabian:如果使用msbuild从命令行生成,会发生什么情况?