2011-08-30 103 views
1

我已经尝试了很多次以获得此编译,我想要做的是将名称和扩展数组通过设计器进行编辑,但通过设计器进行编辑时,它会抛出错误:找不到默认的构造函数,并且不可序列化

未找到类型'Filter'的构造函数。

并编译:

属性'ExtensionList'的代码生成失败。错误是:'在'Assembly'测试,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'中键入'Filter'未被标记为可序列化。

任何人都可以帮忙吗?这是我使用的代码:

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

回答

4

我不知道它是否是你的问题的所有,但你的ISerializable实施是南辕北辙。你的意思来填充对象在构造函数和SerializationInfoGetObjectData

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

我也没有想到这会导致在编译时有问题,但...什么样的代码世代参与?

+0

是的,我把它放回到构造函数中。问题没有改变。 它并没有阻止它运行,它只是显示这个错误信息6次,然后编译。 –

+0

@Fabian:你是说如果你再次构建它,它开始编译?这是一个警告还是一个实际的错误? –

+0

它显示为播放错误声音的消息框,但该应用程序仍在编译。消息框在编译时显示为6或7次。 编辑:它也做到这一点,当我保存该项目。我猜这是来自设计人员,虽然在打开设计器中的属性窗口时不显示此错误,但当按下“添加”按钮时,它只会抱怨没有构造函数。 –

相关问题