2010-05-05 60 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

相關問題