【问题标题】:No default constructor found, and not serializable未找到默认构造函数,且不可序列化
【发布时间】:2011-08-31 03:04:41
【问题描述】:

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

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

并在编译时:

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

【问题讨论】:

    标签: c# arrays compilation designer


    【解决方案1】:

    我不确定这是否是您的问题的全部,但是您对ISerializable 的实现是错误的。您打算在构造函数中填充 object,并在 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:你的意思是如果你再次构建它,它会开始编译?是警告还是实际错误?
    • 它显示为一个消息框播放错误声音,但应用程序仍然编译。消息框在编译时出现 6 或 7 次。编辑:当我保存项目时它也会这样做。我猜这是来自设计器,虽然在设计器中打开属性窗口时它没有显示此错误,但当我按下“添加”按钮时,它只会抱怨没有构造函数。
    • 哇,既然我已经保存并重新打开了 Visual Studio,它并没有抱怨任何事情,但是 resX 文件被搞砸了,我手动删除了 ExtensionList 的键并且“添加”按钮起作用了,但窗口没有名称和扩展名,只接受对象类型。
    • @Fabian:如果您使用 msbuild 从命令行构建会发生什么?
    猜你喜欢
    • 1970-01-01
    • 2017-02-28
    • 2016-10-29
    • 2021-06-07
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多