其他分享
首页 > 其他分享> > 为什么我什至首先需要序列化?

为什么我什至首先需要序列化?

作者:互联网

因此,我正在使用以下程序集,该程序集具有以下定义(相当无害):

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