为什么我什至首先需要序列化?
作者:互联网
因此,我正在使用以下程序集,该程序集具有以下定义(相当无害):
public class QueryDefinition
{
private List<QueryFilter> TheCurrentFilters = null;
public List<QueryFilter> CurrentFilters
{
set { TheCurrentFilters = value; }
get { return TheCurrentFilters; }
}
// other code
public class QueryFilter
{
// member variables are: seven public string's & two public int's
public override string ToString()
{
return FilterText;
}
}
}
在另一个程序集中,我们有一个UserControl:
public partial class QueryWizard : UserControl
{
private List<QueryDefinition.QueryFilter> TheCurrentFilters = null;
public List<QueryDefinition.QueryFilter> CurrentFilters
{
set { TheCurrentFilters = value; }
get { return TheCurrentFilters; }
}
// other code
}
有趣的代码,但这就是我必须使用的代码.
无论如何,如果我转到另一个项目(引用此UserControl),创建一个窗体,然后将控件放到窗体上,则会收到此错误:
程序集中的“ System.Runtime.Serialization.SerializationException:类型QueryDefinition QueryFilter”未标记为可序列化.
我实际上并没有使用任何序列化代码,因此QueryFilter列表中的哪些是SerializationException的原因?
我已经使用[Serializable]标签来摆脱这种情况.但是最近我们正在重建项目(Visual WebGUI升级),现在遇到了“无法加载反序列化所需的类型”的问题.我没有解决这个问题,而是决定尝试弄清楚为什么我们首先需要序列化标签!谢谢.
解决方法:
这是因为设计人员试图将用户控件“ CurrentFilters”属性的内容序列化为表单初始化代码.
检查DesignerSerializationVisibility属性:http://msdn.microsoft.com/en-us/library/system.componentmodel.designerserializationvisibility.aspx
如果您不打算支持CurrentFilters属性的设计时编辑,则将其设置为hidden应该可以解决此问题(我认为,自从我构建Winforms控件以来已经很久了)
标签:serialization,user-controls,c,winforms 来源: https://codeday.me/bug/20191106/2000079.html