我已经尝试了很多次来编译,我想要做的是有一组名称和扩展可以通过设计师编辑,但是当通过设计师编辑时,它会抛出错误:
找不到“过滤器”类型的构造函数。
并编译:
属性'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[]));
}
}
答案 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);
}
我不希望这会在编译时导致问题......但是涉及什么样的代码生成?