找不到默认构造函数,也不能序列化

时间:2011-08-30 18:57:35

标签: c# arrays compilation designer

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

找不到“过滤器”类型的构造函数。

并编译:

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

有人可以帮忙吗?这是我正在使用的代码:

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

1 个答案:

答案 0 :(得分:3)

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

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

我不希望这会在编译时导致问题......但是涉及什么样的代码生成?