2010-05-05 69 views
3

所以,我用下面的组件,它具有以下定义(相当无害)工作:为什么我甚至需要首先序列化?

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

在另一个组件,我们有一个用户控件:

public partial class QueryWizard : UserControl 
{ 
    private List<QueryDefinition.QueryFilter> TheCurrentFilters = null; 

    public List<QueryDefinition.QueryFilter> CurrentFilters 
    { 
     set { TheCurrentFilters = value; } 
     get { return TheCurrentFilters; } 
    } 

    // other code 
} 

有趣的代码,但这是我必须与之合作。

不管怎样,如果我去另一个项目(即引用此用户控件),创建一个表单,然后将控件到窗体,我得到这个错误:

“System.Runtime.Serialization.SerializationException :在Assembly ...中键入QueryDefinition + QueryFilter'未标记为可序列化。'

我实际上并没有使用任何序列化代码,所以QueryFilter的List是什么是SerializationException的原因?

我已经使用[Serializable]标签来摆脱这种情况。但最近我们正在重建项目(Visual WebGUI升级),现在我遇到了“无法加载反序列化所需的类型”问题。我决定试着找出为什么我们首先需要序列化标签,而不是解决这个问题。谢谢。

+0

看看堆栈跟踪异常 – Andrey 2010-05-05 16:01:53

回答

2

这是因为设计者试图将usercontrols“CurrentFilters”属性的内容序列化为表单初始化代码。

检查DesignerSerializationVisibility属性:http://msdn.microsoft.com/en-us/library/system.componentmodel.designerserializationvisibility.aspx

如果你不打算支持CurrentFilters属性的编辑设计时,将其设置为隐藏应该解决这个问题(我想,是因为年龄我建WinForms控件)

+0

一个及时的,正确的答案的!我非常感谢。绿色复选标记为你! – JustLooking 2010-05-05 19:06:34

2

CurrentFilters的实际值使用BinaryFormatter序列化并存储在.resx文件中。你几乎肯定不希望发生这种情况。首先,你将依赖于包含QueryFilter类的程序集的[AssemblyVersion]号码。这应该解释你现在得到的“无法加载类型”异常。

首先了解CurrentFilters在设计时如何以数值结束。您需要小心设计时运行的事件。典型的候选者是构造函数和Load事件。使用Control.DesignTime属性可防止代码运行。

接下来,确保财产价值没有得到持续应用的属性:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
public List<QueryFilter> CurrentFilters 
{ 
} 
+0

Spot-on。非常感谢您的时间。我提出了答案,但我认为绿色的选中标记是罗杰。我希望我能把它交给你们两个,但看起来罗杰需要更多一点。你有足够的积分终身! – JustLooking 2010-05-05 19:05:46

相关问题